优雅的解决方案,通过精确设置删除尾随 0

Elegant solution to remove trailing 0's with precision set

本文关键字:设置 删除 解决方案      更新时间:2023-10-16

是否使用std C 或Boost库有任何优雅的解决方案,以满足以下条件的方式将double输出至std::cout

  1. 科学符号被禁用
  2. 小数零件的精度是6
  3. 但是,落后0的(小数点)未打印出

例如:

double d = 200000779998;
std::cout << `[something]` << d;

应准确打印出200000779998[something]应该可能是某些现有操纵器的noexcept组合。

这是不是解决问题的解决方案:

std::cout << std::setprecision(6) << std::fixed << d;

因为它用尾声0'S

打印出200000779998.000000

代替使用fixed操纵器,您可以尝试使用(滥用?)defaultfloat。据我所知,它根据将数字放在指定的精度内的能力选择固定或科学。结果,您可以将精度设置为积分零件的数字 所请求的分数精度(在您的情况下为6)。

double d = 200000779998;
std::cout << std::setprecision(integralDigits(d) + 6) << d << std::endl;

您可以在这里尝试。

很难证明负面,但我假设否。

要求与任何正常使用不一致。空间效率决定了二进制格式。精确度的6位数字(十进制)表明,旨在为人类读者提供的格式,他们无法通过大量数据进行搅动。人类没有符合一致的6位数字格式的问题。

因此,您基本上是针对没有明显受众的格式的,这就是为什么如果有支持的话,我会感到惊讶的原因。