为std :: ostream精度设置最小小数位数

时间:2010-03-22 02:04:05

标签: c++ decimal precision ostream

有没有办法设置std :: ostream输出的“最小”小数位数?

例如,假设我有两个我想要打印的未知双变量(这里为了说明而添加了值):

double a = 0;
double b = 0.123456789;

我可以设置我的最大小数精度,以便我输出b完全

std::cout << std::setprecision(9) << b << std::endl;
>>> 0.123456789

有没有办法设置“最小”精度(最小小数位数),同时保持“最大”精度,以便

std::cout << a << std::endl << b << std::endl;

产量

0.0
0.123456789

0
0.123456789

谢谢! 菲尔


对此的简短回答是“否”。该流只有一个精度设置,无法区分最大和最小精度。谢谢大家的慷慨建议!

2 个答案:

答案 0 :(得分:2)

cout << setprecision(1) << fixed << d << endl;

在setprecision之后使用固定。

编辑:这就是你想要的。它会根据d。

改变精度
cout << setprecision(d?9:1) << fixed << d << endl;

答案 1 :(得分:0)

我认为没有办法实现你的要求而不将数字转换为字符串(具有高精度),并剥离尾随的零。

这是合适的,因为仅仅因为有尾随零并不意味着那里没有精度,并且运行时无法分辨。

例如,如果我用便宜的尺度测量物体的重量,它可能是1.0千克。

如果我用高精度秤称重,它可能是1.00000公斤。仅仅因为有尾随零,并不意味着应该丢弃准确性。