我有一个 NSArray,我想在其中存储 double 值。我将其定义如下
NSMutableArray *setOfDoubles;
我添加的元素如下
NSNumber *num;
num = [NSNumber numberWithDouble:someDouble];
[setOfDoubles addObject:num];
我读到的元素如下
num = [setOfDoubles lastObject];
[setOfDoubles removeLastObject];
doubleValueToUse = [num doubleValue];
我的问题有时(并非总是),例如当 num (作为对象)为 5.1 时,doubleValueToUse (作为双值)为 5.099999999999996。我计算 num (作为一个对象)是 5.1 的方式是,我进行调试,当我将鼠标悬停在 num = [setOfDoubles lastObject]; 行的 num 顶部时它显示 5.1,但经过 doubleValue 转换后,它变成了我提到的数字。有谁知道为什么会发生这种情况吗?
最佳答案
并非每个数字都可以使用浮点变量准确表示。例如,在我们常见的十进制(以 10 为基数)系统中,您无法使用有限位数精确表示 1/3,但在三进制(以 3 为基数)系统中,它只是 0.1。同样,您可以用有限数量的十进制数字编写的数字,其二进制表示形式不一定具有有限数量的数字,因此会出现错误。
如果您有兴趣,可以查看有关该主题的一些链接:
http://floating-point-gui.de/basic/
http://www.mathworks.com/support/tech-notes/1100/1108.html
http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html
关于iphone - doubleValue 并不总是将对象正确转换为 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7286133/