我想使用lexical_cast
将浮点数转换为字符串。通常它工作正常,但我有一些没有小数的数字的问题。如何修复字符串中显示的小数?
示例:
double n=5;
string number;
number = boost::lexical_cast<string>(n);
结果编号为5
,我需要编号5.00
。
答案 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::ostringstream
。 boost::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);
}