Python中的整数除法

6
我对Python中以下整数的计算感到困惑:

-7/3 = -3 是因为 (-3)*3 = -9 < -7。我理解。

7/-3 = -3,我不明白这是如何定义的。 (-3)*(-3) = 9 > 7。我的看法是应该是-2,因为 (-3)*(-2) = 6 < 7

这是如何工作的?


Python通常遵循最少惊讶原则。对于整数除法,它总是向下取整。 - Chriszuma
3
以下是 BDFL 本人的解释,来自于这篇博客文章:http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html。 - Björn Lindqvist
4
对于前来寻求整数除法帮助的人:在 Python 3 中,可以使用 // 进行整数除法,例如 -7 // 3 = -3,但 -7 / 3 = -2.33.. - poke
3
顺便说一下,从数学上讲,“-7/3”和“7/-3”没有任何实质区别,因此有两个不同的结果会更加复杂。 - poke
1
@poke 在Python 2中也可以使用// - agf
为了进一步解释@poke所说的内容; -7/3 == 7/-3 == -1 * 7/3(这里不考虑四舍五入) - Daenyth
5个回答

14

根据文档

对于(普通或长整型)整数除法,结果是一个整数。结果总是向负无穷大舍入:1/2是0,(-1)/2是-1,1/(-2)是-1,(-1)/(-2)是0。

-inf舍入解释了您所看到的行为。


4
这是它的工作原理:
int(x)/int(y) == math.floor(float(x)/float(y))

1

/ 用于浮点数除法 // 用于整数除法(返回整数)

而且Python会将结果向下取整


1

对aix和robert的回答进行扩展。

最好的思考方式是针对浮点数结果向下取整(朝着负无穷大方向):

-7/3 = floor(-2.33) = -3

7/-3 = floor(-2.33) = -3


0

Python会向下取整。 7/3 = 2 (2+1/3) -7/3 = -3 (-2+1/3)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接