为什么整数除法和转换为int之后的int的结果对于大数字是不同的?

Muk*_*man 2 python floating-point division

print(10**40//2)
print(int(10**40/2))
Run Code Online (Sandbox Code Playgroud)

输出代码:

5000000000000000000000000000000000000000
5000000000000000151893014213501833445376
Run Code Online (Sandbox Code Playgroud)

为何不同的价值?为什么第二个的输出print()看起来如此?

Mar*_*ers 9

浮点表示10**40//2不准确:

>>> format(float(10**40//2), '.0f')
'5000000000000000151893014213501833445376'
Run Code Online (Sandbox Code Playgroud)

这是因为浮点运算只是一种近似值,特别是当你超出你的CPU可以精确建模的时候(因为浮点在硬件中处理).

整数除法永远10**40不必将数字表示为浮点数,它只需要除以整数,这在Python中可以任意大,而不会出现精度损失.

另见:

如果必须使用更高精度的浮点运算,还要查看decimal模块.