整数除法:对于所有整数a,b,// b == int(a / b)为真?

时间:2012-10-11 15:58:23

标签: python python-3.x integer-division

我知道如果数字都是正数,则整数除法将始终返回与浮点结果截断相同的答案。如果其中一个或两个都是否定的,那是真的吗?

我只是想知道是否有一个整数除法表达式会在Python 2和Python 3中返回相同的结果(是的,我知道from __future__ import division)。

P.S。我们暂时忽略浮点溢出。

1 个答案:

答案 0 :(得分:10)

在Python 3中并非如此,您可以自己测试它:

>>> int(-1/3) == -1//3
False

分别给予a(商)和b(余数)的qr的整数除法和模数将始终返回满足b*q + r == a(a*b)>0 == q>0的数字a*b(即qabs(r) < abs(q)具有相同的符号)和int(q)。如果q是浮点数,则表达式from __future__ import division总是向0舍入。

除非你做a/b == a//b,否则它将永远属于Python 2,但那是因为a如果b和{{1}}是Python 2中的整数。