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

lea*_*vst 66 c++ string double floating c++11

在C++ 11中,当给定输入值type 或时,std :: to_string默认为6位小数.改变这种精度的推荐方法或最优雅的方法是什么?floatdouble

hmj*_*mjd 100

没有办法改变精度,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 out.str();
}
Run Code Online (Sandbox Code Playgroud)

  • 很好,但能够在不创建临时字符串的情况下完成此操作会很棒.:/特别是在一个非常非常紧凑的内环中. (15认同)
  • 为了确保位数,还必须传递std :: fixed.请参阅http://www.cplusplus.com/reference/iomanip/setprecision/中的示例 (8认同)
  • 在紧密的内部循环中完全使用字符串是一个坏主意。内存分配超级慢。您试图通过避免临时分配来使用 1 个内存分配而不是 2 个内存分配。如果您希望通过使用 sprintf 和堆栈分配的缓冲区来提高性能,则可以尝试避免任何内存分配。:-) (3认同)
  • 是不是通过返回rval隐式移动的内部字符串? (2认同)
  • 您不需要`iomanip`:只需使用`out.precision(n);即可。出&lt;&lt; a_value;`。使用`iomanip`甚至没有更少的输入。 (2认同)