转换的问题()

问题描述:

当我运行这段代码:转换的问题()

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

不出所料,我分别1120.0

然而,当加入这一行:

print int(100 * (value - dollars)) 

19

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

但是0.20是不同的。在计算机内部,它实际上是一个稍小的数字,所以乘以100得到19.99999 ....当int在小数点后切断部分时,结果为19,而不是预期的20.

然后我尝试:

value_tmp = 0.20 
print int(value_tmp * 100) 

20,不19,这里有什么问题吗?

+0

尝试将其转换为浮动。 –

+0

这是漂浮物的问题 - 你可能得不到与你期望相等的计算结果完全相同的结果(即以两种不同的方式计算相同的数值可能会产生两个*轻微*不同的结果)。出于这个原因,你通常用一个容差(即'abs(a - b) jonrsharpe

+0

您可以绕过您的号码 – Brambor

你有近似值 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