2

好的,这完全没有意义:

我创建了一个 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

我在这里想念什么?

4

2 回答 2

8

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

每个程序员都应该知道的关于浮点的知识

于 2010-03-10T21:37:45.960 回答
0

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

于 2010-03-11T00:14:46.490 回答