双精度

时间:2014-10-16 07:00:20

标签: objective-c

如果已经提出要求,请道歉 - 不知道要搜索什么。

简单的代码:

double x = 4505;
double y = 1000;
double z = 1000000;
double result = (x * y) / z;

答案应为4.505;但我明白了:

result = 4.5049999999999999

x,y和z的值可以是任何值,有时我需要在结果中达到这种精确度,但我不明白为什么会发生这种情况。

问题如何删除舍入错误,以便我可以重新运行十进制值的进一步计算,而不会得到错误的结果,同时保持数字的高精度需要它。

1 个答案:

答案 0 :(得分:1)

它只是Floating Point Rounding Error。还有this

如果您希望result四舍五入到小数点后3位,请使用:

result = floor(result * 1000.0) / 1000.0;

或仅在演示期间:

NSLog(@"result = %.3f", result);