2013-10-05 73 views
1

基本上我正在做的是使用urllib從網站下載某個日期。這個數字出現在我認爲是Byte形式的地方。因此,我通過執行以下操作將其更改爲整數。這似乎工作正常。減去整數python奇怪的結果

real_value = (int(real_value)/100) 

然後我創建另一個變量應該等於兩個值之間的差異。

add_to_value = real_value - last_real_value 
print(add_to_value) 

奇怪的是,這有時工程和其他時間我與上年底很多額外的數字結果,或者它會說「9.999999999999996e-05」。

所以我很困惑。有任何想法嗎?

+3

浮點錯誤:參見[這裏](http://docs.python.org/2/tutorial/floatingpoint.html) –

回答

0

該weired值是正常的,應該是正確的。

這是因爲您正在使用浮點運算。您始終可以通過設置用於表示的位數來限制結果的精確度。

參考:http://en.wikipedia.org/wiki/Floating_point

+0

就這樣結束了我的目的工作。我想我也可以使用小數模塊,但使用下面的精度作品。 print(「%0.4f」%real_value) – Alfred

2

浮點數can't represent most numbers exactly。即使有一個非常簡單的例子:

>>> 0.1 + 0.1 
0.20000000000000001 

你可以看到它不是確切的。如果你使用浮點數,這只是你必須處理的事情。另外,您也可以使用Python's decimal module

>>> from decimal import Decimal 
>>> Decimal('0.1') + Decimal('0.1') 
Decimal('0.2') 

即使decimal不能代表所有的號碼完全,但有很多的基地,10個操作的問題時它應該給你更合理的結果。

0

閱讀了關於issues with floating points in python

假設你yousing python3:您可能需要使用雙/經典python2的「整數除法」行爲,其中結果被四捨五入。

real_value = (int(real_value) // 100)