首页 > 解决方案 > 如何将双精度转换为字符串的总位数(小数点的左侧和右侧)?

问题描述

我正在寻找一种在 c++ 中将双精度转换为字符串的方法,这样无论小数点前后有多少位,无论零位如何,总位数都保持为 10。更好理解的例子:

0.00000000000000000000 =预期结果> 0.0000000000

12345.00000000000000000 =预期结果> 12345.00000

-15.123456789012 =预期结果> -15.12345678

我找不到任何相关的答案。对于 snprintf、std::setprecision 和 ostringstream、to_string、Boost 的 lexical_cast 等方法,上述某些情况会失败。

代码示例:

double num = 12345.0000000000001;

std::ostringstream streamObj2;

streamObj2 << std::fixed <<  std::setprecision(10) << num;

std::string strObj2 = streamObj2.str();

std::cout  << strObj2 << '\n';

输出 = 12345.0000000000,这不是我所期望的。删除 std::fixed 输出为 12345

我需要的 = 12345.00000

请帮助我,谢谢。

标签: c++c++11

解决方案


感谢您的评论,因此我找到了答案。使用 std::showpoint 而不是 std::fixed 有助于满足要求。

双数 = 12345.0000000000001;

std::ostringstream 流Obj2;

streamObj2 << std::showpoint << std::setprecision(10) << num;

std::string strObj2 = streamObj2.str();

std::cout << strObj2 << '\n';

输出:12345.00000


推荐阅读