我知道如果数字都是正数,则整数除法将始终返回与浮点结果截断相同的答案。如果其中一个或两个都是否定的,那是真的吗?
我只是想知道是否有一个整数除法表达式会在Python 2和Python 3中返回相同的结果(是的,我知道from __future__ import division
)。
P.S。我们暂时忽略浮点溢出。
答案 0 :(得分:10)
在Python 3中并非如此,您可以自己测试它:
>>> int(-1/3) == -1//3
False
分别给予a
(商)和b
(余数)的q
和r
的整数除法和模数将始终返回满足b*q + r == a
和(a*b)>0 == q>0
的数字a*b
(即q
和abs(r) < abs(q)
具有相同的符号)和int(q)
。如果q
是浮点数,则表达式from __future__ import division
总是向0舍入。
除非你做a/b == a//b
,否则它将永远属于Python 2,但那是因为a
如果b
和{{1}}是Python 2中的整数。