在Objective-C中浮动的问题

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

我的代码是(这只是一个示例代码,但我的原始代码做这样的事情):

float x = [@"2.45" floatValue]; for(int i=0; i<100; i++) x += 0.22; NSLog(@"%f", x); 

输出是52.450001而不是52.450000!

我不知道,因为这发生!

感谢您的帮助!

〜〜解决

感谢大家! 是的,我已经解决了双重types!

浮点数是具有一定精度的数字表示。 不是每个值都可以用这种格式表示。 也看到这里 。

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

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

那么为什么一个数字在浮点数受到影响之后有小数字呢? 因为表示是基于一个二进制系统,而不是一个小数,使其他数字很容易代表,然后小数。

计算机不能总是容易地表示浮点数。 这导致一些数字不准确。

这就像我问你十进制的三分之一。 不pipe你怎么努力,你都不能告诉我这是什么,因为小数不能准确地描述这个数字。

浮点数不能准确地描述一些十进制数。