当转换浮点数值时,设置std::to_string的精度

105
在C++11中,std::to_string默认将类型为floatdouble的输入值保留6位小数。如何推荐或最优雅地更改此精度?
1个回答

154

通过to_string()没有办法改变精度,但是可以使用setprecision IO操作符来代替:

#include <sstream>

template <typename T>
std::string to_string_with_precision(const T a_value, const int n = 6)
{
    std::ostringstream out;
    out.precision(n);
    out << std::fixed << a_value;
    return std::move(out).str();
}

23
不错,但是最好能够在不创建临时字符串的情况下实现。:/ 特别是在非常紧密的内部循环中。 - 3Dave
4
内部字符串因为作为返回值而被隐式移动了,对吗? - Jules G.M.
10
为确保位数,还需传递std::fixed。请参见http://www.cplusplus.com/reference/iomanip/setprecision/中的示例。 - RED SOFT ADAIR
5
在紧密的内部循环中使用字符串是不明智的,因为内存分配速度非常慢。如果你想要避免临时内存分配,应该尝试只分配1次内存而不是2次。如果你想获得更好的性能,可以使用sprintf和堆栈分配缓冲区来避免任何内存分配。 :-) - Joe
3
你不需要使用 iomanip,只需使用 out.precision(n); out << a_value;。使用 iomanip 甚至不会少打字。 - Ruslan
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接