1

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

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

float x = [@"2.45" floatValue];


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

NSLog(@"%f", x);

输出是 52.450001 而不是 52.450000 !

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

谢谢你的帮助!

~解决了~

谢谢大家!是的,我已经用双重类型解决了!

4

3 回答 3

6

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

您可以很容易地想到为什么会这样:在区间 (1..1) 中有无限数量的数字,但浮点数只有有限数量的位来表示 (-MAXFLOAT..最大浮动)。

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

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

于 2009-07-28T11:52:40.850 回答
2

http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

于 2009-07-28T11:44:20.647 回答
2

浮点数并不总是很容易用计算机表示。这会导致某些数字不准确。

就像我问你十进制的 1/3 是多少。无论您多么努力,您都无法告诉我它是什么,因为十进制无法准确地描述该数字。

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

于 2009-07-28T11:55:45.353 回答