是否有任何优雅的解决方案使用 std
C++ 或 Boost
库将 double
输出到 std::cout
满足以下条件的方式:
- 禁用科学记数法
- 小数部分精度为6
- 但是,尾随的
0
(小数部分)不会被打印出来
例如:
double d = 200000779998;
std::cout << `[something]` << d;
应该准确地打印出 200000779998
。 [something]
应该是一些现有操纵器的 noexcept
组合。
这不是问题的解决方案:
std::cout << std::setprecision(6) << std::fixed << d;
因为它打印出 200000779998.000000
,尾随 0
最佳答案
您可以尝试使用(滥用?)defaultfloat
,而不是使用fixed
操纵器。据我了解,它根据将数字置于指定精度内的能力来选择固定的或科学的。因此,您可以将精度设置为整数部分的位数 + 请求的小数精度(在您的情况下为 6)。
double d = 200000779998;
std::cout << std::setprecision(integralDigits(d) + 6) << d << std::endl;
关于c++ - 使用精度集删除尾随 0 的优雅解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47641290/