12

以下代码段输出 0.29847,而我原本预期为 0.29848:

double f = 0.298475;
cout << setprecision(5) << f << endl;

但是,对于其他示例,我观察到四舍五入:

double f = 0.123459;
cout << setprecision(5) << f << endl;

输出:0.12346

double f = 0.123454;
cout << setprecision(5) << f << endl;

输出:0.12345

4

2 回答 2

18

该数字0.298475不能精确地表示为 a double(因为它不是分母是 2 的幂的分数,即 11939/40000),并且存储的实际数字实际上更接近 0.29847 而不是 0.29848。

于 2012-06-06T21:24:01.483 回答
1

据我从文档中看到的 setprecision() 不执行任何舍入,而只是设置小数点后显示的最大位数。双精度数和浮点数的可能表示形式可能与您使用的常量初始值设定项不同。

于 2012-06-06T21:28:28.117 回答