将浮点数转换为格式化字符串
我正在尝试将 double
数字转换为 std::string
,转换应以带有 2 位十进制数字的十进制格式或指数形式打印:
- 1 -> 1.00
- 0.1 -> 0.10
- 0.01→ 0.01
- 0.015 --> 1.5e-2
- 10→ 10.00
- 100 -> 10.00 100 -> 100.00
- 15000 --> 1.5e4
我尝试将 boost::format
函数与 %g
类型一起使用,但是虽然可以设置有效位数,但无法设置小数点后打印的位数:
- 1 -> 1
- 0.1→ 0.1
- 0.01→ 0.01
- 10-> 10
- 100 -> 10 100 100
有没有更好的方法来进行这种转换/格式化?我更喜欢使用标准库或 Boost。
I'm trying to convert a double
number to a std::string
, the conversion should print either in the decimal format with 2 decimal digits or in the exponential form:
- 1 -> 1.00
- 0.1 -> 0.10
- 0.01 -> 0.01
- 0.015 -> 1.5e-2
- 10 -> 10.00
- 100 -> 100.00
- 15000 -> 1.5e4
I tried to use the boost::format
function with the %g
type, but while it is possible to set the number of significant digits, it's not possible to set the number of printed digits after the decimal point:
- 1 -> 1
- 0.1 -> 0.1
- 0.01 -> 0.01
- 10 -> 10
- 100 -> 100
Is there a better way of doing this kind of conversion/formatting? I would preferably use the Standard Library or Boost.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(6)
不需要 boost,尽管如果你愿意的话,应该有办法使用 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
,请误读问题,我会使用std::ostringstream
它支持相同的 iostream 操纵器和插入运算符。然后你可以调用str()
来从中获取一个字符串。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
根据数字的大小选择
科学
或固定
。就是这么简单。
干杯&呵呵,
Choose
scientific
orfixed
depending on the size of the number.It's that easy.
Cheers & hth.,