我是编程和Python的初学者。我正在做一些简单的数学运算。因此,我们知道,Python解释器中的3/2
给出了1
。但-3/2
给出了-2
。你能在这里指出差异吗?
答案 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有两个除法运算符。
/
//
这里,//
将始终将结果舍入为最接近的整数(与操作数的类型无关)。这称为分区。但是/
将舍入到最接近的整数,如果两个操作数都是整数,那么如果其中一个操作数是浮点数,那么它将执行实际除法。
这个例子可以清楚地理解差异,
>>> 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。
引用文字的最后一行是您实际问题的答案。