Jib*_*bin 2 python floating-point precision floating-accuracy
为什么这样?
>>> max(2, 2.01)
2.0099999999999998
Run Code Online (Sandbox Code Playgroud)
以二进制表示的数字2.01是:
b10.00000010100011111100001010001111110000101000111111000010100011111100...
Run Code Online (Sandbox Code Playgroud)
计算机仅使用有限数量的数字来存储浮点值,但2.01的二进制表示需要无限多个数字; 结果,它四舍五入到最接近的可表示值:
b10.000000101000111111000010100011111100001010001111110
Run Code Online (Sandbox Code Playgroud)
用十进制表示,这个数字正是:
2.0099999999999997868371792719699442386627197265625
Run Code Online (Sandbox Code Playgroud)
当你打印出来时,它会再次四舍五入到十七个十进制数字,给出:
2.0099999999999998
Run Code Online (Sandbox Code Playgroud)