在C ++中使用boost :: lexical_cast将double转换为字符串?

时间:2011-02-16 12:34:24

标签: c++ string boost

我想使用lexical_cast将浮点数转换为字符串。通常它工作正常,但我有一些没有小数的数字的问题。如何修复字符串中显示的小数?

示例:

double n=5;
string number;
number = boost::lexical_cast<string>(n);

结果编号为5,我需要编号5.00

4 个答案:

答案 0 :(得分:29)

来自boost lexical_cast的文档:

  

对于更复杂的转换,例如精度或格式需要比lexical_cast的默认行为提供更严格的控制,建议采用传统的字符串流方法。如果转换数字为数字,则numeric_cast可能提供比lexical_cast更合理的行为。

示例:

#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;
}

答案 1 :(得分:13)

看一下boost :: format库。它将printf的可用性与流的类型安全性相结合。对于速度,我不知道,但我怀疑它现在真的很重要。

#include <boost/format.hpp>
#include <iostream>

int main()
{
   double x = 5.0;
   std::cout << boost::str(boost::format("%.2f") % x) << '\n';
}

答案 2 :(得分:3)

如果您需要复杂的格式,请改用std::ostringstreamboost::lexical_cast用于“简单格式化”

std::string
get_formatted_value(double d) {
    std::ostringstream oss;
    oss.setprecision(3);
    oss.setf(std::ostringstream::showpoint);
    oss << d;
    return oss.str();
}

答案 3 :(得分:1)

你也可以使用sprintf,它比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);
}