小数性病设定最低数量:: ostream的精度
题
有没有一种方法来设置小数位的“最低”数字,一个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;
不隶属于 StackOverflow