负整数除法令人惊讶的结果

时间:2011-04-04 06:25:05

标签: python division integer-division

在我的申请中,我遇到了以下内容,并对结果感到惊讶:

8/-7=-2(两个整数)。

这意味着什么?

5 个答案:

答案 0 :(得分:44)

对于实际值,即8.0/(-7.0),结果大致为-1.143

使用整数除法的结果向下舍入到-2的负值。 (这也称为“地板分区”)

这就是为什么你会得到一些有些令人困惑的答案:

>>> 8/(-7)
-2
>>> 8/7
1

注意:这在Python 3中已“修复”,其中8/(-7)的结果为-1.143。因此,如果您没有理由使用Python 2,则应升级。 ;)

在Python 3中,如果您仍想要整数除法,则可以使用//运算符。这将为您提供与Python 2中8/(-7)相同的答案。

以下是关于该主题的Python增强建议:PEP 238 -- Changing the Division Operator

答案 1 :(得分:9)

让python自动将整数除法转换为float,你可以使用:

from __future__ import division

现在:

8/-7=-1.1428571428571428

此功能不在标准python 2中,不会破坏依赖于整数除法的现有代码。 但是,这是python 3的默认行为。

答案 2 :(得分:9)

Python总是对负数除法和正数除法进行“底层划分”。

那是

1/10 = 0
1/-10 = -1

但有时我们需要1 / -10为0

我发现可以先使用float division然后将结果转换为int来完成,例如

int(float(1)/-10) = 0

这对我来说很好,无需导入未来的部门或升级到Python 3

希望它可以帮到你〜

答案 3 :(得分:4)

当两个值都是整数时,分割Python使用Floor division。

答案 4 :(得分:0)

在python中,/运算符用于整数除法。您可以将其视为浮点除法,然后进行floor操作。

例如,

  

8/7 == floor(8.0 / 7.0)== 1

     

8 / -7 == floor(8.0 / -7.0)== -2