doubleValue不会始终正确地将对象转换为double值

时间:2011-09-02 16:00:18

标签: iphone ios nsarray double

我有一个NSArray,我想在其中存储双值。我将其定义为以下

NSMutableArray *setOfDoubles;

我添加如下元素

NSNumber *num;
num = [NSNumber numberWithDouble:someDouble];
[setOfDoubles addObject:num];

我读了下面的元素

num = [setOfDoubles lastObject];  
[setOfDoubles removeLastObject];
doubleValueToUse = [num doubleValue];

我的问题有时(并非总是),例如当num(作为对象)为5.1时,doubleValueToUse(作为double值)为5.099999999999996。我认为num(作为一个对象)是5.1的方式是我调试,当我将鼠标悬停在num = [setOfDoubles lastObject]行上的num之上时;它显示5.1但在doubleValue转换后它变成我提到的数字。有人知道为什么会这样吗?

2 个答案:

答案 0 :(得分:4)

并非每个数字都可以使用float变量准确表示。例如,你不能使用我们的公共十进制(base-10)系统中的有限位数来精确地表示1/3,但在三元(base-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

答案 1 :(得分:1)

float值是正常的。

如果要在代码的所有位置保存float个数字的初始(相同)表示,可以将其保存在NSString中。当你需要浮点数时,你只需要写[NSString floatValue];。但如果您有大量float值,则无效。