负整数除法的意外结果

65 投票
5 回答
39849 浏览
提问于 2025-04-16 15:02

在我的应用程序中,我遇到了以下情况,并对结果感到惊讶:

8/-7=-2(都是整数)。

这是什么意思呢?

5 个回答

8

如果你想让Python自动把整数除法变成浮点数除法,可以使用:

from __future__ import division

现在:

8/-7=-1.1428571428571428

这个功能在标准的Python 2中是没有的,因为这样做会影响那些依赖整数除法的旧代码。

不过,在Python 3中,这个行为是默认的。

26

在Python中,无论是对负数还是正数进行除法运算,结果总是向下取整。

也就是说

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

但是有时候我们希望1除以-10的结果是0。

我发现可以先进行浮点数除法,然后再把结果转换成整数,比如:

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

这样对我来说效果很好,不需要导入未来的除法功能,也不需要升级到Python 3。

希望这对你有帮助~

61

对于实际的数值,比如 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 -- 改变除法运算符

撰写回答