可可触摸。为什么NSNumber返回intValue和floatValue的差值?

时间:2010-03-10 21:31:37

标签: objective-c cocoa-touch nsnumber

好的,这绝对没有意义:

我创建了一个NSNumber:

NSNumber *n = [NSNumber numberWithInt:37669178];  

然后我将值作为整数和浮点数回显:

int i = [n intValue];  
float f = [n floatValue];

以下是他们的价值观:

int: 37669178  
float: 37669176.000000

咦!?!?!

有人可以向我解释为什么会发生这种情况以及如何解决这个问题。这肯定不是一个精确的问题。 37,669,178完全在浮子的精度范围内。

谢谢,
道格

更新

好的,现在我完全糊涂了。参考math.h

#define MAXFLOAT    ((float)3.40282346638528860e+38)

整数值37669178是3.7669178e + 7,完全在允许的最大浮点值范围内。所以,[n floatValue]应该返回37669178.0 37669176.0

我在这里缺少什么?

2 个答案:

答案 0 :(得分:8)

一个浮点只有23位的精度(不要与 range 混淆),这是大约7位有效十进制数字。如果您需要更高的精度,请使用double

What Every Programmer Should Know About Floating Point

答案 1 :(得分:0)

与手头的主题相关:NSNumber不打算用精确数学运算。它只是在对象中包装数字的一种方法。如果你需要精度,你应该使用NSDecimal。