iphone - doubleValue 并不总是将对象正确转换为 double 值

标签 iphone ios nsarray double

我有一个 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/

相关文章:

ios - 当我更改时间间隔的值时,如何更新我的 NSTimer

objective-c - 从 NSMutableArray 获取独特的项目

iphone - 如何使用UIScrollView在UIView之间切换

ios - 以编程方式加载使用 NSCoding 创建的对象模型

ios - 存储本地玩家高分的最佳方式是什么

iphone - 如果可能进行逆向工程,如何保护应用程序 IPA 免受黑客攻击

objective-c - 使用 Cocoa 绑定(bind)可编辑 OutlineView

objective-c - enumerateObjectsUsingBlock : and for( in ) 之间的不同行为

iphone - 如何增加使用 AVAudioRecorder 录制的声音的音量

iphone - 添加导航按钮在钛合金中第一次不起作用