我测试了以下代码,以验证在C ++中使用std::setprecision
时一些简单的数字输出:
double f1 = 3.1415;
std::cout << std::setprecision(4) << f1 << '\n';
double f2 = 1.2345;
std::cout << std::setprecision(4) << f2 << '\n';
相应的输出为:
3.142
1.234
为什么不能将1.234舍入为1.235?此外,如果将f2
更改为1.2315,则输出会发生舍入,输出为1.232。使用setprecision
格式化数字输出的格式时,有什么经验法则吗?
答案 0 :(得分:1)
此评论告诉您原因。我强烈建议您阅读https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
为了进行正确的舍入,C ++附带了round(),但它仅舍入为整数,而不是任意的小数位。以下内容可以为您提供1.235
,尽管有点难看:
double f1 = 3.1415;
std::cout << std::setprecision(4) << round(f1*1000)/1000 << '\n';
double f2 = 1.2345;
std::cout << std::setprecision(4) << round(f2*1000)/1000 << '\n';