有没有办法设置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
谢谢! 菲尔
对此的简短回答是“否”。该流只有一个精度设置,无法区分最大和最小精度。谢谢大家的慷慨建议!
答案 0 :(得分:2)
cout << setprecision(1) << fixed << d << endl;
在setprecision之后使用固定。
编辑:这就是你想要的。它会根据d。
改变精度cout << setprecision(d?9:1) << fixed << d << endl;
答案 1 :(得分:0)
我认为没有办法实现你的要求而不将数字转换为字符串(具有高精度),并剥离尾随的零。
这是合适的,因为仅仅因为有尾随零并不意味着那里没有精度,并且运行时无法分辨。
例如,如果我用便宜的尺度测量物体的重量,它可能是1.0千克。
如果我用高精度秤称重,它可能是1.00000公斤。仅仅因为有尾随零,并不意味着应该丢弃准确性。