我一直试图将浮动值四舍五入到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
我尝试了许多方法,包括Round a float to a given precision但没有成功。
我正在使用AMD FX83xx 64位。程序使用XE7
在32位调试中构建由于
答案 0 :(得分:0)
所需的6位十进制精度非常接近浮点数据类型的精度限制。对于40f左右的数字,epsilon或连续可表示的浮点值之间的差值约为7.63E-6,因此在“最佳”和“最佳”之间只有几位不同。价值和你得到的。这可能是由于接近极限的四舍五入,但我不确定。