【问题标题】:Set precision of std::to_string when converting floating point values [duplicate]转换浮点值时设置 std::to_string 的精度[重复]
【发布时间】:2013-05-17 09:41:58
【问题描述】:

在 C++11 中,std::to_string 在给定 floatdouble 类型的输入值时默认为 6 位小数。更改此精度的推荐或最优雅的方法是什么?

【问题讨论】:

    标签: c++ string c++11 double floating


    【解决方案1】:

    无法通过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();
    }
    

    【讨论】:

    • 很好,但如果能够在不创建临时字符串的情况下做到这一点,那就太好了。 :/ 特别是在一个非常非常紧凑的内部循环中。
    • 内部字符串不是被返回的rval隐式移动了吗?
    • 为了保证位数,还必须传递std::fixed。查看cplusplus.com/reference/iomanip/setprecision中的示例
    • 在紧密的内部循环中完全使用字符串是个坏主意。内存分配非常慢。您试图通过避免临时使用 1 个内存分配而不是 2 个内存分配。如果您希望通过使用 sprintf 和堆栈分配的缓冲区来提高性能,您可以尝试避免任何内存分配。 :-)
    • 您不需要iomanip :只需使用out.precision(n); out &lt;&lt; a_value;。使用iomanip 输入的内容也不少。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2012-06-23
    • 2020-02-03
    • 1970-01-01
    • 2021-09-16
    • 2011-02-23
    相关资源
    最近更新 更多