以下代码片段输出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
解决方法
数字0.298475不能在双精度中表示(因为它的分母不是分母是2的幂,为11939/40000),实际存储的数字实际上比0.29848更接近0.29847.