是否有任何优雅的解决方案使用std
C ++或Boost
库以满足以下条件的方式输出double
到std::cout
:
0
(小数部分)不会打印出来例如:
double d = 200000779998;
std::cout << `[something]` << d;
应准确打印200000779998
。 [something]
应该是某些现有操纵者的noexcept
组合。
这是 解决问题的方法:
std::cout << std::setprecision(6) << std::fixed << d;
因为它打印出200000779998.000000
,后跟0
的
答案 0 :(得分:1)
您可以尝试使用(滥用?)fixed
,而不是使用defaultfloat
操纵器。据我所知,它根据将数字置于指定精度范围内的能力选择固定或科学。因此,您可以将精度设置为整数部分的位数+所需的分数精度(在您的情况下为6)。
double d = 200000779998;
std::cout << std::setprecision(integralDigits(d) + 6) << d << std::endl;
答案 1 :(得分:0)
很难证明是消极的,但我会假设没有。
要求与任何正常使用不一致。空间效率决定了二进制格式。 6位数(十进制)的精确度表明了一种针对人类读者的格式,他们无法通过大量数据流失。人类处理一致的6位数格式没有问题。
所以,你基本上是针对一个没有明显受众的格式,这就是为什么如果有支持的话我会感到惊讶。