好的,这绝对没有意义:
我创建了一个NSNumber:
NSNumber *n = [NSNumber numberWithInt:37669178];
然后我将值作为整数和浮点数回显:
int i = [n intValue];
float f = [n floatValue];
以下是他们的价值观:
int: 37669178
float: 37669176.000000
咦!?!?!
有人可以向我解释为什么会发生这种情况以及如何解决这个问题。这肯定不是一个精确的问题。 37,669,178完全在浮子的精度范围内。
谢谢,
道格
#define MAXFLOAT ((float)3.40282346638528860e+38)
整数值37669178是3.7669178e + 7,完全在允许的最大浮点值范围内。所以,[n floatValue]应该返回37669178.0 不 37669176.0
我在这里缺少什么?
答案 0 :(得分:8)
一个浮点只有23位的精度(不要与 range 混淆),这是大约7位有效十进制数字。如果您需要更高的精度,请使用double
。
答案 1 :(得分:0)
与手头的主题相关:NSNumber不打算用精确数学运算。它只是在对象中包装数字的一种方法。如果你需要精度,你应该使用NSDecimal。