将浮点数转换为格式化字符串

时间:2011-10-11 16:11:53

标签: c++ boost formatting printf

我正在尝试将double数字转换为std::string,转换应以十进制格式打印,带有2位十进制数字或以指数形式打印:

  1. 1 - > 1.00
  2. 0.1 - > 0.10
  3. 0.01 - > 0.01
  4. 0.015 - > 1.5E-2
  5. 10 - > 10.00
  6. 100 - > 100.00
  7. 15000 - > 1.5e4
  8. 我尝试使用boost::format类型的%g函数,但是虽然可以设置有效位数,但是无法设置小数点后的打印位数:

    1. 1 - > 1
    2. 0.1 - > 0.1
    3. 0.01 - > 0.01
    4. 10 - > 10
    5. 100 - > 100
    6. 有没有更好的方法来进行这种转换/格式化?我最好使用标准库或Boost。

6 个答案:

答案 0 :(得分:4)

根据号码的大小选择scientificfixed

就这么简单。

干杯&第h。,

答案 1 :(得分:3)

如果您愿意,可以使用boost::formatsprintf来实现此目的。

#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。