他们在小数字上看起来一样,但在较大数字上不同。
例如:
a = int(1267650600228229401496703205376/10)
b = 1267650600228229401496703205376 // 10
print(a - b) # prints 7036874417767
a = int(1493845793475/10)
b = 1493845793475 // 10
print(a - b) # prints 0
怎么回事?
他们在小数字上看起来一样,但在较大数字上不同。
例如:
a = int(1267650600228229401496703205376/10)
b = 1267650600228229401496703205376 // 10
print(a - b) # prints 7036874417767
a = int(1493845793475/10)
b = 1493845793475 // 10
print(a - b) # prints 0
除了现有的答案外,值得一提的是,您不必走那么远来观察差异:
>>> -1//2
-1
>>> int(-1/2)
0
/
执行浮点除法,精度为53位; //
执行地板除法,当两个操作数都是整数时没有精度限制(除了可用RAM所施加的限制)。true_division
__future__
导入在Python 2中获得Python 3的行为。1267650600228229401496703205376 / 10
等于126765060022822940149670320537.6 = 1.267650600228229401496703205376e+29
(浮点除法),但由于浮点数的不精确性,Python将其评估为1.2676506002282295e+29
,因此您已经失去了精度,这就是差异的原因。整数除法a//b的结果
a=4//3=1
浮点数除法a/b的结果
a=4/3=1.33333
int(a/b)
会朝着零方向截断。 - Willem Van Onsema/b
将执行浮点除法,这是不精确的。即使您将结果转换为int
,您已经引入了不精确性。 - khelwood