转换的问题()
问题描述:
当我运行这段代码:转换的问题()
value = 11.20
dollars = int(value)
print dollars
print 100 * (value - dollars)
不出所料,我分别11
和20.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
,这里有什么问题吗?
答
你有近似值 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
尝试将其转换为浮动。 –
这是漂浮物的问题 - 你可能得不到与你期望相等的计算结果完全相同的结果(即以两种不同的方式计算相同的数值可能会产生两个*轻微*不同的结果)。出于这个原因,你通常用一个容差(即'abs(a - b)
jonrsharpe
您可以绕过您的号码 – Brambor