2015-08-15 94 views
1

當我運行這段代碼:轉換的問題()

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

回答

1

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