#include <iostream>
#include <iomanip>
int main()
{
float f = 0.115;
std::cout << f << std::endl;
std::cout << std::fixed << std::setprecision(2) << f << std::endl;
return 0;
}
上面代码的输出是:
0.115
0.12
将0.115舍入为0.12是有道理的。但是,当我们将f更改为0.225时,输出为:
0.225
0.22
为什么不将其四舍五入为0.23?
您的计算机无法正确表示大多数十进制小数数字,因为它可以处理二进制数字。相反,它尝试查找可以代表的最接近的数字,并改用该数字。
例如,我的计算机将以下数字表示为:
decimal actual representation
0.115 0.115000002
0.225 0.224999994
0.245 0.245000005
0.335 0.335000008
0.445 0.444999993
默认情况下,C ++将使用正常的四舍五入方法将其四舍五入到最接近的数字,即,将数字5-9
四舍五入并0-4
四舍五入。因此,上面的数字,0.115
,0.245
和0.335
将被调高至0.12
,0.24
和0.34
,而0.225
和0.445
将向下调整至0.22
和0.44
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句