2013-12-18 52 views
0

我試圖在運行到100.循環增加0.2值恆定x where x = 8是代碼如何在Python中正確添加浮動數字?

x = 8 
>>> for i in range(100): 
...  x += 0.2 
... 
>>> x 

,但每次我得到不同的答案和計算總是不正確。我讀了Floating Point Arithmetic Issue and Limitations,但應該有一些解決方法。我可以使用doubles(如果它們存在)?我使用Python 2.7

UPDATE:

import time 
x=1386919679 

while(1): 

     x+=0.02 
     print "xx %0.9f"%x 
     b= round (x,2) 
     print "bb %0.9f"%b 

     time.sleep(1) 

輸出

xx 1386933518.586801529 
bb 1386933518.589999914 
xx 1386933518.606801510 
bb 1386933518.609999895 
xx 1386933518.626801491 
bb 1386933518.630000114 

所需的輸出 我想正確的輸出,我知道如果只是寫print x這將是正確的。但我的應用程序要求我應該以9精度打印結果。我是新手,所以請親切。

+2

你能告訴我你期望'sum'做什麼嗎?此外,我想知道如果你真的有浮點精度或與您的代碼的問題?你能給出你期望的結果的具體例子,以及你得到的各種不同的,不正確的結果嗎? – KobeJohn

+0

此問題及其中的代碼對於預期結果尚不清楚。你在期待什麼?提供的代碼將「正確」計算8 + 0.2 * 100,這是不是打算? – arrdem

+0

@kobejohn對不起,我在這裏錯誤地複製了它。我只想看看已經添加了什麼。 –

回答

0

當然可以使用雙精度浮點。您已默認使用它。

至於變通的辦法: x += 0.2 * 100

我知道這聽起來很容易,但解決浮點不精確不設置FLOATING_POINT_IMPRECISION = False。這是表示的一個基本限制,沒有一般的解決方法,只有特定的解決方案(以及適用於特定情況組的模式)。

還有一個合理的數字類型,它可以準確地存儲0.2,但對於大多數真實世界的用例來說,這並不值得考慮。