a // b和int(a / b)之间有什么区别?

时间:2017-02-17 15:21:46

标签: python python-3.x

对于小数字它们似乎相等但对于较大数字则不同。

例如:

a = int(1267650600228229401496703205376/10)
b = 1267650600228229401496703205376 // 10
print(a - b) # prints 7036874417767

a = int(1493845793475/10)
b = 1493845793475 // 10
print(a - b) # prints 0

怎么回事?

3 个答案:

答案 0 :(得分:3)

在Python 3中/执行浮点除法,它具有53位精度; //进行分层划分,当两个操作数都是整数时,它没有精度限制(除了可用RAM强加的限制)。

您可以使用true_division __future__导入在Python 2中获取Python 3行为。

答案 1 :(得分:1)

正如@khelwood解释的那样,在Python 3中,a/b执行浮点除法。尝试在解释器中输入1/2 - 您将获得0.5,而不是0

所以在你的例子中,1267650600228229401496703205376 / 10实际上等于126765060022822940149670320537.6 = 1.267650600228229401496703205376e+29(浮点除法),但是由于浮点数的不准确性,Python将其评估为1.2676506002282295e+29,所以你'失去了精确度,这导致了差异。

请参阅PEP 238

答案 2 :(得分:1)

补充现有的答案似乎值得一提,你不需要那么远就能看出差异:

>>> -1//2
-1
>>> int(-1/2)
0
相关问题