0

我一直在尝试将浮点值四舍五入到 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 位 Debug 中构建

谢谢

4

1 回答 1

0

您所需的 6 位十进制数字精度非常接近浮点数据类型的精度限制。对于 40f 左右的数字,epsilon 或连续可表示浮点值之间的增量约为 7.63E-6,因此“最佳”值与您得到的值之间只有几位不同。这可能是由于四舍五入接近极限,但我不确定。

于 2016-04-22T01:24:32.283 回答