为什么print int(100*(11.20 - 11))在python中打印19而不是20?

Kir*_*han 2 python floating-point int

我刚刚开始python教程.为什么

print  int (100*(11.20 - 11))
Run Code Online (Sandbox Code Playgroud)

打印19而不是20在python?有一些整数由整数完成,但我无法理解.感谢帮助.

Pas*_*uoq 7

发生这种情况是因为11.20不完全是1120/100但略低于此.因此11.20 - 11最终略低于20/100(*).乘以100,11.20 - 11产生略低于20的浮点数,并且因为int(...)截断(向零舍入),结果为19.

出于效率原因,浮点数表示为具有2的幂的分数作为分母.所以1/2,1/4,1/16,......可以精确地表示为浮点数,但是1/5不能(没有2的幂可以用作分母来精确表示1/5) .

(*)这个浮点减法恰好是精确的,因此与20/100相比,结果的绝对误差与绝对误差11.20完全相同,与1120/100相比.请注意,相对误差被放大,因为相同的绝对误差应用于更小的值.减去已经不精确且接近的值称为"灾难性取消",而Python行中的减法就是这种灾难性的取消.