這是我的問題,我有幾個參數需要增加0.1。 但我的用戶界面只渲染x.x,x.xx,x.xxx用於浮點數,因爲0.1f並不是真的0.1,但長期來看類似於0.10000000149011612,我的用戶界面會呈現-0.00,這沒有多大意義。如何防止所有可能的UI情況。浮點增加UI的精度問題
謝謝。
這是我的問題,我有幾個參數需要增加0.1。 但我的用戶界面只渲染x.x,x.xx,x.xxx用於浮點數,因爲0.1f並不是真的0.1,但長期來看類似於0.10000000149011612,我的用戶界面會呈現-0.00,這沒有多大意義。如何防止所有可能的UI情況。浮點增加UI的精度問題
謝謝。
如果您知道您的浮點值將始終爲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);
:打開四捨五入成一個獨立的功能,並從增量解耦它是非常有用
在顯示之前使用整數併除以10(或1000等)。你的參數將存儲整數十分之一,你會增加十分之一。
我不確定我是否理解。爲什麼你的用戶界面顯示'0.1f'爲'「-0.00」'? – 2010-10-28 19:08:50
也許你不應該使用浮點數......如果你想0.1精確的話,可以使用整數類型。 – JoshD 2010-10-28 19:09:40
@Oli它不是0.1的增量。 – DogDog 2010-10-28 19:20:47