我正在尝试将double
数字转换为std::string
,转换应以十进制格式打印,带有2位十进制数字或以指数形式打印:
我尝试使用boost::format
类型的%g
函数,但是虽然可以设置有效位数,但是无法设置小数点后的打印位数:
有没有更好的方法来进行这种转换/格式化?我最好使用标准库或Boost。
答案 0 :(得分:4)
根据号码的大小选择scientific
或fixed
。
就这么简单。
干杯&第h。,
答案 1 :(得分:3)
如果您愿意,可以使用boost::format
或sprintf
来实现此目的。
#include <iostream>
#include <iomanip>
int main()
{
std::string numStr("3.14159265");
double num(atof(numStr.c_str()));
std::cout
<< std::setprecision(2)
<< std::scientific << num
<< std::fixed << num;
return 0;
}
修改:如果你想从double
转到std::string
,我会误解问题我会使用支持相同iostream操纵器和插入的std::ostringstream
运营商。然后你可以调用str()
来获取一个字符串。
答案 2 :(得分:1)
你可以使用ostringstream,就像这样
#include <sstream>
#include <string>
std::string FloatToString(float fNumber)
{
std::ostringstream os;
os << fNumber;
return os.str();
}
答案 3 :(得分:0)
我不确定这是不是你要找的但是...... 您可以使用cout使用setprecision函数控制打印的位数。
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
double d = 123123.23234234;
cout << setprecision(15) << d;
system("pause");
return 0;
}
答案 4 :(得分:0)
sprintf();应该很容易帮助你将double打印成一个字符串/ char数组。
答案 5 :(得分:-1)
普通旧C sprintf支持小数#,如下所示:“%。3g”
您可以很容易地将char *输出转换为std :: string。