Objective-C中的浮点数有问题

时间:2009-07-28 11:41:14

标签: objective-c cocoa floating-point floating-point-precision

我有一个小问题,我找不到解决方案!

我的代码是(这只是一个示例代码,但我原来的代码做了类似的事情):

float x = [@"2.45" floatValue];


for(int i=0; i<100; i++)
    x += 0.22;

NSLog(@"%f", x);

输出为52.450001而不是52.450000!

我不知道因为这种情况发生了!

感谢您的帮助!

〜解决〜

感谢大家!是的,我用双重型解决了!

3 个答案:

答案 0 :(得分:6)

浮点数是具有一定精度的数字表示。并非每个值都可以用这种格式表示。另见here

你可以很容易地想到为什么会出现这种情况:在intervall(1..1)中有一个无限数量的数字,但是一个浮点只有有限的位数来表示( - 中的所有数字) MAXFLOAT..MAXFLOAT)。

更恰当地说:在32位整数表示中,有一定数量的整数要表示,但是有无数无数的实数值无法在32或64位的有限表示中完全表示。因此,不仅对最高和最低可表示的实际值有限制,而且对准确性也有限制。

那么为什么浮点数受影响后数字很少?因为表示基于二进制系统而不是十进制,所以使其他数字很容易表示,然后是十进制数。

答案 1 :(得分:2)

答案 2 :(得分:2)

浮点数不能总是由计算机轻松表示。这导致某些数字不准确。

就像我问你1/3是十进制的。无论你怎么努力,你都无法告诉我它是什么,因为十进制不能准确地描述这个数字。

浮点数无法准确描述某些十进制数字。