我有一个小问题,我找不到解决方案!
我的代码是(这只是一个示例代码,但我的原始代码是这样的):
float x = [@"2.45" floatValue];
for(int i=0; i<100; i++)
x += 0.22;
NSLog(@"%f", x);
输出是 52.450001 而不是 52.450000 !
我不知道,因为会发生这种情况!
谢谢你的帮助!
~解决了~
谢谢大家!是的,我已经用双重类型解决了!
我有一个小问题,我找不到解决方案!
我的代码是(这只是一个示例代码,但我的原始代码是这样的):
float x = [@"2.45" floatValue];
for(int i=0; i<100; i++)
x += 0.22;
NSLog(@"%f", x);
输出是 52.450001 而不是 52.450000 !
我不知道,因为会发生这种情况!
谢谢你的帮助!
~解决了~
谢谢大家!是的,我已经用双重类型解决了!
浮点数是具有一定精度的数字表示。并非每个值都可以用这种格式表示。也见这里。
您可以很容易地想到为什么会这样:在区间 (1..1) 中有无限数量的数字,但浮点数只有有限数量的位来表示 (-MAXFLOAT..最大浮动)。
更恰当地说:在 32 位整数表示中,有可数个整数要表示,但有无数个实数值无法在 32 位或 64 位的有限表示中完全表示。因此,不仅对最高和最低可表示的实际值有限制,而且对准确性也有限制。
那么为什么浮点数后位数很少的数字会受到影响呢?因为表示是基于二进制系统而不是十进制的,所以其他数字比十进制更容易表示。
浮点数并不总是很容易用计算机表示。这会导致某些数字不准确。
就像我问你十进制的 1/3 是多少。无论您多么努力,您都无法告诉我它是什么,因为十进制无法准确地描述该数字。
浮点数不能准确地描述一些十进制数。