C ++舍入行为

974
#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?

Frxstrem

您的计算机无法正确表示大多数十进制小数数字,因为它可以处理二进制数字。相反,它尝试查找可以代表的最接近的数字,并改用该数字。

例如,我的计算机将以下数字表示为:

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.1150.2450.335将被调高至0.120.240.34,而0.2250.445将向下调整至0.220.44

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章