[英]comparison float rounding fails System.Math.RoundTo C++ XE7
我一直在嘗試將浮點值四舍五入到4個精度,但沒有成功。
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
我嘗試了許多方法,包括將浮點數舍入到給定的精度沒有成功。
我正在使用AMD FX83xx 64位。 程序使用XE7內置於32位調試中
謝謝
您希望的6個十進制數字的精度非常接近float數據類型的精度極限。 對於40f左右的數字,ε或連續可表示的浮點值之間的增量約為7.63E-6,因此“最佳”值與所得到的值之間只有幾位不同。 這可能是由於四舍五入接近極限,但我不確定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.