Convert double to string using boost::lexical_cast in C++?

后端 未结 4 459
走了就别回头了
走了就别回头了 2020-12-05 19:41

I\' d like to use lexical_cast to convert a float to a string. Usually it works fine, but I have some problems with numbers without decimal. How can I fix numbe

相关标签:
4条回答
  • 2020-12-05 20:09

    you can also use sprintf, which is faster then ostringstream

    #include <cstdio>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        double n = 5.0;
    
        char str_tmp[50];
        sprintf(str_tmp, "%.2f", n); 
        string number(str_tmp);
    }
    
    0 讨论(0)
  • 2020-12-05 20:10

    Have a look at boost::format library. It merges the usability of printf with type safety of streams. For speed, I do not know, but I doubt it really matters nowadays.

    #include <boost/format.hpp>
    #include <iostream>
    
    int main()
    {
       double x = 5.0;
       std::cout << boost::str(boost::format("%.2f") % x) << '\n';
    }
    
    0 讨论(0)
  • 2020-12-05 20:18

    From the documentation for boost lexical_cast:

    For more involved conversions, such as where precision or formatting need tighter control than is offered by the default behavior of lexical_cast, the conventional stringstream approach is recommended. Where the conversions are numeric to numeric, numeric_cast may offer more reasonable behavior than lexical_cast.

    Example:

    #include <sstream>
    #include <iomanip>
    
    int main() {
        std::ostringstream ss;
        double x = 5;
        ss << std::fixed << std::setprecision(2);
        ss << x;
        std::string s = ss.str();
        return 0;
    }
    
    0 讨论(0)
  • 2020-12-05 20:33

    If you need complex formatting, use std::ostringstream instead. boost::lexical_cast is meant for "simple formatting".

    std::string
    get_formatted_value(double d) {
        std::ostringstream oss;
        oss.setprecision(3);
        oss.setf(std::ostringstream::showpoint);
        oss << d;
        return oss.str();
    }
    
    0 讨论(0)
提交回复
热议问题