16

有没有办法设置 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

?

谢谢!菲尔


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

4

2 回答 2

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

在设置精度后使用固定。

编辑:这就是你想要的。它将基于 d 改变精度。

cout << setprecision(d?9:1) << fixed << d << endl;
于 2010-03-22T02:11:55.920 回答
1

我认为没有一种方法可以在不将数字转换为字符串(高精度)并去除尾随零的情况下实现您的要求。

这是适当的,因为仅仅因为有尾随零并不意味着那里没有精度,并且运行时无法说明这一点。

例如,如果我用便宜的秤测量一个物体的重量,它可能是 1.0 公斤。

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

于 2010-03-22T02:21:11.493 回答