c++ - 使用精度集删除尾随 0 的优雅解决方案

标签 c++ boost c++14 std

是否有任何优雅的解决方案使用 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;

因为它打印出 200000779998.000000,尾随 0

最佳答案

您可以尝试使用(滥用?)defaultfloat,而不是使用fixed 操纵器。据我了解,它根据将数字置于指定精度内的能力来选择固定的或科学的。因此,您可以将精度设置为整数部分的位数 + 请求的小数精度(在您的情况下为 6)。

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

You can try it here.

关于c++ - 使用精度集删除尾随 0 的优雅解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47641290/

相关文章:

c++ - 无递归初始化

c++ - 使用可变参数模板构建元组

C++ 在指向结构的指针中设置数组

c++ - 从周数和年份开始的月份

c++ - 来自 boost/serialization/vector #include 的链接器错误

c++ - C++11 之后的 C++ 类分类

c++ - 如何在模板变量定义中引入static_assert

c++ - 将 `auto` 关键字与 STL 迭代器一起使用

c++ - 如何使自定义容器类型适应 BOOST_FOREACH?

c++ - 在 C++14 中,constexpr 成员可以更改数据成员吗?