使用精确设置删除尾随 0 的优雅解决方案

Mar*_*tin 5 c++ boost std c++14

有使用任何优雅溶液stdC ++或Boost库,以输出doublestd::cout的方式,在满足以下条件:

  1. 科学记数法被禁用
  2. 小数部分的精度为 6
  3. 但是,尾随0的(小数部分)不会打印出来

例如:

double d = 200000779998;
std::cout << `[something]` << d;
Run Code Online (Sandbox Code Playgroud)

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

不是问题的解决方案:

std::cout << std::setprecision(6) << std::fixed << d;
Run Code Online (Sandbox Code Playgroud)

因为它打印出200000779998.000000带有尾随0

MSa*_*ers -1

很难证明是否定的,但我认为不会。

这些要求与任何正常使用不一致。空间效率决定了二进制格式。6 位数字(十进制)精度建议采用一种供人类读者使用的格式,因为人类读者无法翻阅大量数据。人类可以毫无问题地处理一致的 6 位数格式。

所以,你基本上是针对一种没有明显受众的格式,这就是为什么如果有支持的话我会感到惊讶。

  • 我想说的是不符合目前的做法。但是,应该删除不必要的零绝对是一个明智的想法(甚至,忽略没有实际意义的小数位(因为精度较低)也是一个明智的想法。) (2认同)