随便尝试了这个:
>>> int(-1/2)
-1
>>> int(-0.5)
0
为什么结果不同?
答案 0 :(得分:6)
试试这个:
>>> -1/2
-1
>>> -0.5
-0.5
区别在于整数除法(前者)在某些版本的Python中导致整数,而不是像第二个数字那样浮点数。您在两个不同的数字上使用int
,因此您会得到不同的结果。如果您先指定浮点数,您将看到差异消失。
>>> -1.0/2.0
-0.5
>>> int(-1.0/2.0)
0
>>> int(-0.5)
0
答案 1 :(得分:2)
您看到的差异是由于Python中的舍入效果如何。 int()
函数truncates to zero,如文档中所述:
如果x是浮点数,则转换将截断为零。
另一方面,当两个操作数都是整数时,/
就好像应用了mathematical floor operation一样:
普通或长整数除法产生相同类型的整数;结果是数学除法的结果,“floor”函数应用于结果。
因此,在第一种情况下,-1 / 2
在理论上会在-0.5
中产生,但由于两个操作数都是整数,因此Python基本上将结果置于最后,这使得它成为-1
。当然,int(-1)
是-1
。在第二个示例中,int
直接应用于-0.5
,浮点数,因此int
向0截断,结果为0
。
(Python 2.x也是如此,我怀疑你正在使用它。)
答案 2 :(得分:2)
这是两件事的结果:
Negative integer division surprising result
http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html
强制至少有一个数字浮动,结果将不再令你感到惊讶。
assert int(-1.0/2) == 0
正如其他人所指出的那样,在Python 3.x中,整数除法的默认值是将结果提升为浮点数,如果除法中有非零余数。
答案 3 :(得分:1)
正如TheSoundDefense所提到的,它取决于版本。在Python 3.3.2中:
>>> int(-1/2)
0
>>> int(-0.5)
0
答案 4 :(得分:1)
int()命令截断为0,不像floor()向下舍入到下一个整数。 所以int(-0.5)显然为0.
对于-1/2,实际上-1/2等于-1!因此向下舍入到下一个整数是-1。在Python 2中,-a / b!= - (a / b)。实际上,-1 / 2等于floor(-1.0 / 2.0),即-1。