2010-10-28 55 views
0

這是我的問題,我有幾個參數需要增加0.1。 但我的用戶界面只渲染x.x,x.xx,x.xxx用於浮點數,因爲0.1f並不是真的0.1,但長期來看類似於0.10000000149011612,我的用戶界面會呈現-0.00,這沒有多大意義。如何防止所有可能的UI情況。浮點增加UI的精度問題

謝謝。

+0

我不確定我是否理解。爲什麼你的用戶界面顯示'0.1f'爲'「-0.00」'? – 2010-10-28 19:08:50

+0

也許你不應該使用浮點數......如果你想0.1精確的話,可以使用整數類型。 – JoshD 2010-10-28 19:09:40

+0

@Oli它不是0.1的增量。 – DogDog 2010-10-28 19:20:47

回答

3

如果您知道您的浮點值將始終爲0.1的倍數,則可以在每次增量後將其舍入以確保其保持合理的值。它仍然不是確切的(因爲它實際上不能),但至少錯誤不會累積,並且它會正確顯示。

相反的:

x += delta; 

務必:

x = floor((x + delta)/precision + 0.5) * precision; 

編輯:

inline double round(double value, double precision = 1.0) 
{ 
    return floor(value/precision + 0.5) * precision; 
} 

x = round(x + 0.1, 0.1); 
打開四捨五入成一個獨立的功能,並從增量解耦它是非常有用
6

在顯示之前使用整數併除以10(或1000等)。你的參數將存儲整數十分之一,你會增加十分之一。