为什么python int()的工作方式如下?

时间:2014-07-25 22:20:25

标签: python int

随便尝试了这个:

>>> int(-1/2)
-1
>>> int(-0.5)
0
为什么结果不同?

5 个答案:

答案 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)

这是两件事的结果:

  • 当你分割两个整数时,Python 2.x会进行整数除法;
  • Python使用“Floored”除以负数。

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。