首先发布在这里。遇到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。我在这里做错了什么?
谢谢大家。
答案 0 :(得分:2)
你没有做错任何事。这也不是NSNumber
或CGFloat
的具体问题。浮点数是一个非常普遍的东西,它基于2的幂,而不是10的幂。您应该阅读this definitive article或Wikipedia article。
重点是,标准浮点数只能准确地表示一个数字,它是1 / 2,1 / 4,1 / 8,...的总和。 1/10不是。因此,您无法使用标准浮点数完全准确地表示0.1。
如果你确实需要处理它,那么有一些例程可以处理有理分数或十进制浮点数。