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

Phi*_*ltt 12 c++ precision decimal ostream

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

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

double a = 0;
double b = 0.123456789;
Run Code Online (Sandbox Code Playgroud)

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

std::cout << std::setprecision(9) << b << std::endl;
>>> 0.123456789
Run Code Online (Sandbox Code Playgroud)

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

std::cout << a << std::endl << b << std::endl;
Run Code Online (Sandbox Code Playgroud)

产量

0.0
0.123456789
Run Code Online (Sandbox Code Playgroud)

0
0.123456789
Run Code Online (Sandbox Code Playgroud)

谢谢!菲尔


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

Odd*_*ing 2

我认为如果不将数字转换为字符串(高精度)并去掉尾随零,就没有办法实现您的要求。

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

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

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