3/2和-3/2之间有什么区别?

时间:2014-11-04 17:02:17

标签: python division

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

3 个答案:

答案 0 :(得分:5)

在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在评论中指出的那样,值得注意的是-的优先级高于/,因此-3/2相当于(-3)/2而不是-(3/2)。如果首先应用除法,结果确实是-1

答案 1 :(得分:4)

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

同样

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

答案 2 :(得分:1)

Python有两个除法运算符。

  1. /

  2. //

  3. 这里,//将始终将结果舍入为最接近的整数(与操作数的类型无关)。这称为分区。但是/将舍入到最接近的整数,如果两个操作数都是整数,那么如果其中一个操作数是浮点数,那么它将执行实际除法。

    这个例子可以清楚地理解差异,

    >>> 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,与float true除法返回的2.7 5进行对比。 请注意,(-11) // 4-3,因为-2.75向下舍入。请参阅PEP 238

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