这里的第一篇文章。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。我在这里做错什么了?
谢谢大家。
发布于 2010-05-12 05:46:44
你没做错什么。这也不是NSNumber或CGFloat的具体问题。浮点数字是非常普遍的,它是基于2的幂,而不是10的幂。你应该读这篇权威文章或维基百科文章。
问题是,标准浮点数只能精确地表示一个1/2,1/4,1/8,.之和的数字。1/10不是。所以你不能完全准确地用标准浮点数来表示0.1。
如果你真的需要处理它,有处理有理数或十进制浮点数的例程。
https://stackoverflow.com/questions/2816212
复制相似问题