NSNumber floatValue不等于NSNumber值

时间:2010-05-12 05:19:02

标签: nsnumber cgfloat

首先发布在这里。遇到NSNumber的floatValue方法有问题 - 不知何故,它返回一个不精确的数字。这就是问题所在:我将一堆NSNumbers存储在一个数组中,如下所示:

NSArray *a = [NSArray arrayWithObjects:
    [NSNumber numberWithFloat:0.04f],
    [NSNumber numberWithFloat:0.028f], 
    [NSNumber numberWithFloat:0.016f],
    [NSNumber numberWithFloat:0.004f],
   nil];

然后我尝试检索第一个值(例如): NSNumber n =(NSNumber )[objectAtIndex:0]; CGFloat f = [n floatValue];

在调试器中,n显示值0.04(在摘要列中),但f显示值0.0399999991。我在这里做错了什么?

谢谢大家。

1 个答案:

答案 0 :(得分:2)

你没有做错任何事。这也不是NSNumberCGFloat的具体问题。浮点数是一个非常普遍的东西,它基于2的幂,而不是10的幂。您应该阅读this definitive articleWikipedia article

重点是,标准浮点数只能准确地表示一个数字,它是1 / 2,1 / 4,1 / 8,...的总和。 1/10不是。因此,您无法使用标准浮点数完全准确地表示0.1。

如果你确实需要处理它,那么有一些例程可以处理有理分数或十进制浮点数。

相关问题