【问题标题】:What is the difference between 3/2 and -3/2?3/2 和 -3/2 有什么区别?
【发布时间】:2014-11-06 00:30:32
【问题描述】:

我是编程和 Python 的初学者。我正在做一些简单的数学运算。所以我们知道,Python 解释器中的3/2 给出了1。但是-3/2 给出了-2。你能指出这里的区别吗?

【问题讨论】:

标签: python division


【解决方案1】:

在 Python 2 中,/ 执行整数除法。这意味着如果结果不是整数,则向下舍入到下一个整数值。当值为负时,这自然会四舍五入为更大的负数。

直观地说,整数除法的结果就是浮点除法结果的mathematical floor。因此,整数除法也通常称为floor division

floor(1.5)  # Returns 1.0
floor(-1.5)  # Returns -2.0

可以通过将from __future__ import division 放在模块顶部来改变Python 2 中的这种行为。此导入将使/ 运算符仅指示真正的除法(浮点除法),并使用// 运算符启用显式地板除法(整数除法)。这些约定是 Python 3 中的标准。

from __future__ import division

print(3/2)  # 1.5
print(3//2)  # 1

正如@Dunes 在 cmets 中指出的那样,值得注意的是- 的优先级高于/,因此-3/2 等效于(-3)/2 而不是-(3/2)。如果先应用除法,结果确实是-1

【讨论】:

  • 我认为四舍五入通常称为floor +1,因为它比我解释得更好
  • 值得注意的是-在这里是一元运算符,比除法运算符绑定得更紧密。如果反过来,结果将是相同的。
  • 在 Python 3.4.2 中,int(-1.5) 返回 -1
  • @NoctisSkytower 好吧,我会的!我已经从答案中删除了冒犯性的谎言!
  • @NoctisSkytower:Python 2 中的结果永远相同。 int() 函数截断(即与向零舍入相同),它在文档中说得对。和分工一点关系都没有。
【解决方案2】:
-3/2 == -1.5 , floor(-1.5)  = -2

同样

 3/2 == 1.5 , floor(1.5)  = 1

【讨论】:

    【解决方案3】:

    Python 有两个除法运算符。

    1. /

    2. //

    在这里,// 将始终将结果四舍五入为最接近的整数(无论操作数的类型如何)。这称为楼层划分。但是/ 将四舍五入到最接近的整数,如果两个操作数都是整数,如果其中一个操作数是浮点数,它会进行实际除法。

    这个例子可以很清楚的理解区别,

    >>> 11/4
    2
    >>> 11.0/4
    2.75
    >>> 11//4
    2
    >>> 11.0//4.0
    2.0
    

    引用Python Documentation on floor division

    向下舍入到最接近的整数的数学除法。楼层除法运算符为//。例如,表达式11 // 4 的计算结果为2,与浮点真除法返回的2.75 形成对比。 注意(-11) // 4-3,因为这是-2.75 向下舍入。见PEP 238

    引用文本中的最后一行将是您实际问题的答案。

    【讨论】:

    • 除数和四舍五入是两个不等价的概念。在 Python 3.4.2 中,5 // 3 将产生 1,round(5 / 3) 将产生 2。// 运算符将始终向负无穷大舍入。
    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多