.6 x 100给出结果为60.00004而不是60

aru*_*vma -1 floating-point multiplication

可能重复:
乘以100时出现神秘计算错误

这是我面临的一个奇怪的问题.我将值.6存储到float变量.当我将它乘以100时,我得到错误答案为60.000004.这个.000004来自哪里?这是我的代码

NSlog(@"%f",self.dataHandler.correctPercentage * 100);
if (self.obj.percentage >= (self.dataHandler.correctPercentage * 100) )
{
    //Do something
}
Run Code Online (Sandbox Code Playgroud)

存储在self.dataHandler.correctPercentage中的值是.6.但是当我把它记录下来时,我得到了60.000004.由于这个原因,我的边界条件出错了.

为什么会这样?

Rob*_*ier 6

这是一个舍入错误.数字以二进制存储,而不是十进制.可以用有限数量的二进制数字精确编码的分数与可以用十进制精确编码的分数不同.

有关十进制问题的示例,请考虑1/3.如果我将1/3编码为0.333,则(1/3)*3 = 0.999.二进制有同样的问题.

如果您需要十进制数字以十进制形式准确编码,那么您应该使用NSDecimalNumber为此设计的数字.