有没有一种方法来设置小数位的“最低”数字,一个std :: ostream的意志输出?

举例来说,假设我有两个未知双变量我想打印(此处添加用于说明的目的的值):

double a = 0;
double b = 0.123456789;

来设置我的最大小数精度,使得I输出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

谢谢! 菲尔


短答案是“否”。流只有一个精度设置,没有设施的最大和最小精度之间进行区分。感谢所有为你慷慨的建议!

有帮助吗?

解决方案

我不认为有一种方式来实现你问头也不回的数字转换成字符串(高精度)的东西,剥去尾随零。

这是合适的,因为仅仅是因为有尾随零,并不意味着没有精度那里,运行时不能告诉。

例如,如果我测量物体的重量用便宜的规模,它可以是1.0公斤。

如果我用高精度磅秤称重它,它可以是1.00000公斤。只是因为有尾随零,并不意味着精度应被丢弃。

其他提示

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

用于固定setprecision之后。

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

cout << setprecision(d?9:1) << fixed << d << endl;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top