c++ - 如何将双精度转换为字符串的总位数(小数点的左侧和右侧)?
问题描述
我正在寻找一种在 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
请帮助我,谢谢。
解决方案
感谢您的评论,因此我找到了答案。使用 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