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

per*_*ale 14 c++ string boost

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

例:

double n=5;
string number;
number = boost::lexical_cast<string>(n);
Run Code Online (Sandbox Code Playgroud)

结果号码5,我需要号码5.00.

Mic*_*Mic 30

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;
}
Run Code Online (Sandbox Code Playgroud)


小智 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';
}
Run Code Online (Sandbox Code Playgroud)