Xcode - 调试器没有显示正确的值

时间:2011-07-25 23:56:07

标签: debugging xcode4 floating-point rounding

我们试试这个:

float test = 3.56;
float roundedVal = round(test * 10.0f) / 10.0f;
NSLog (@"%f", roundedVal);

为什么NSLog显示为3.600000,调试器为3.5999999? 我可以指望的正确值是什么?

3 个答案:

答案 0 :(得分:2)

float不是很精确,根据各种因素,您不能指望它们从一个“视图”准确显示到下一个“视图”。阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic

归结为:如果你真的需要精确度,请使用double

答案 1 :(得分:1)

正确的值是调试器。您可以使用上面代码的简化版本来看到这一点:

float test = 3.5999999;
NSLog (@"%f", test);

在这种情况下,您得到的结果与上面提到的结果相同:日志状态为3.600000,调试器状态为3.5999999。在所有情况下,调试器都具有NSLog的correcrt值。当我们深入挖掘时,我们可以看到NSLog稍微按摩浮点值。

实际上 - 你应该在这里使用double来保持你想要的精度。

答案 2 :(得分:1)

没有“正确的价值”。期望值“3.6”没有精确的二进制表示。因此,计算机内部使用的值是近似值。打印值时,需要将其转换回十进制。在您的情况下,二进制表示可能略小于3.6。 NSLog恰好将其四舍五入,而调试器则将其四舍五入。

使用double而不是float,就像接受的答案所说的那样,不会改变任何内容。

相关问题