c ++中的setprecision是圆的吗?如果是这样,我为什么看到这个?

时间:2012-06-06 21:11:51

标签: c++ floating-point

当我预期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

2 个答案:

答案 0 :(得分:16)

数字0.298475无法在double中完全表示(因为它不是分母为2的幂的分数,为11939/40000),而实际存储的数字实际上接近0.29847而不是0.29848。

答案 1 :(得分:1)

从文档中我可以看出,setprecision()不执行任何舍入,只是设置小数点后显示的最大位数。 double和float数字的可能表示可能与您使用的常量初始值设定项不同。