3

第一次在这里发帖。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 ) [a objectAtIndex:0]; CGFloat f = [n floatValue];

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

谢谢大家。

4

1 回答 1

3

你没有做错什么。这也不是NSNumberor的具体问题CGFloat。浮点数非常普遍,它基于 2 的幂,而不是 10 的幂。您应该阅读这篇权威文章维基百科文章

关键是,标准浮点数只能准确表示一个数字,即 1/2、1/4、1/8、...之和。1/10 不是。因此,您不能使用标准浮点数完全准确地表示 0.1。

如果您确实需要处理它,可以使用处理有理分数或十进制浮点数的例程。

于 2010-05-12T05:46:44.313 回答