当我预期0.29848时,以下片段输出0.29847:
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
答案 0 :(得分:16)
数字0.298475
无法在double
中完全表示(因为它不是分母为2的幂的分数,为11939/40000),而实际存储的数字实际上接近0.29847而不是0.29848。
答案 1 :(得分:1)
从文档中我可以看出,setprecision()不执行任何舍入,只是设置小数点后显示的最大位数。 double和float数字的可能表示可能与您使用的常量初始值设定项不同。