负整数除法的意外结果
在我的应用程序中,我遇到了以下情况,并对结果感到惊讶:
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 -- 改变除法运算符