第一篇文章在这里。 NSNumber 的 floatValue 方法有问题——不知何故,它返回一个不精确的数字。问题是这样的:我将一堆 NSNumber 存储在一个数组中,如下所示:
NSArray *a = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.04f],
[NSNumber numberWithFloat:0.028f],
[NSNumber numberWithFloat:0.016f],
[NSNumber numberWithFloat:0.004f],
nil];
然后我尝试检索第一个值(例如):
NS编号n = (NS 编号) [a objectAtIndex:0];
CGFloat f = [n floatValue];
在调试器中,n 显示的值为 0.04(在摘要列中),但 f 显示的值为 0.0399999991。我在这里做错了什么?
感谢大家。
你没有做错任何事。这不是一个具体的问题NSNumber
or CGFloat
, 任何一个。浮点数是非常普遍的,它基于 2 的幂,而不是 10 的幂。你应该阅读这个明确的文章 or 维基百科文章.
重点是,标准浮点数只能准确表示 1/2、1/4、1/8、... 之和。
1/10 不是。因此,您无法使用标准浮点数完全准确地表示 0.1。
如果您确实需要处理它,可以使用处理有理分数或十进制浮点数的例程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)