首先张贴在这里。具有的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的值。什么我在这里做错了吗?

谢谢大家。

有帮助吗?

解决方案

你没有做错什么。这不是专门NSNumberCGFloat的问题,无论是。这件事情对浮点数非常普遍的,这是基于2,不是十的权力的权力。你应该阅读这个明确的文章或的维基百科文章

的一点是,标准浮点数只能精确地表示一个数,其是的总和1/2,1/4,1/8,...。 1/10是没有的。所以不能完全精确地使用标准浮点数字代表0.1

如果你真的需要处理的话,有程序,其处理有理分数或十进制浮点数字。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top