2016-04-22 82 views
0

我一直在試圖四捨五入浮點值到4精度沒有成功。比較浮動四捨五入失敗System.Math.RoundTo C++ XE7

float fconv = 1.0f; 
float fdata = 39.934543423412f; 
float fres = RoundTo(fdata*fconv, -4); 

if(fres <= 39.9345f){do something;} //<-- unwanted behavior 

通緝的結果是39.934500000000
實際結果是39.934543423412

我試過很多方法,包括Round a float to a given precision沒有成功。

我正在使用AMD FX83xx 64位處理器。項目建成使用XE7

感謝

回答

0

你期望的是6位小數精度是非常接近的浮點數據類型的精度限制32位調試。對於大約40f的數字,ε或連續可表示的浮點值之間的差值約爲7.63E-6,因此在「最佳」值與您得到的值之間只有幾位不同。這可能是由於四捨五入接近極限,但我不確定。