Python 的 int() 的转换问题

Conversion Issue on Python's int()

当我运行这个代码时:

value = 11.20
dollars = int(value)
print dollars
print 100 * (value - dollars)

不出所料,我分别得到了1120.0

但是,当添加这一行时:

print int(100 * (value - dollars))

我得到了19

我在网上搜索了一下,得到了解释:

But 0.20 is different. Inside the computer, it's actually a slightly smaller number, so multiplying by 100 gives 19.99999.... When int cuts off the part after the decimal point, 19 is left as the result, instead of the expected 20.

然后我尝试了:

value_tmp = 0.20
print int(value_tmp * 100)

我得到的是20,不是19,这里有什么问题?

您的 近似值 为 20.0:

>>> value = 11.20
>>> dollars = int(value)
>>> 100 * (value - dollars)
19.99999999999993

那是因为你不能用浮点数准确地建模 2/10:

>>> value
11.2
>>> format(value, '.53f')
'11.19999999999999928945726423989981412887573242187500000'

通过将小数部分乘以 100,您放大了这种不精确性。将 int() 添加到 float 数字 楼层 结果。

您可以将数字四舍五入为最接近的整数:

>>> round(100 * (value - dollars), 0)
20.0
>>> int(round(100 * (value - dollars), 0))
20