c ++ std :: stream double值没有科学依据,也没有固定的小数位数

时间:2014-01-08 02:03:59

标签: c++ stl

以下代码将打印a和b的值:

double a = 3.0, b=1231231231233.0123456;
cout.setf(std::ios::fixed);
cout.unsetf(std::ios::scientific);
cout << a << endl << b << endl

输出结果为:

3.000000
1231231231233.012451

您可以看到a已经输出固定的6位小数。 但我希望输出像这样:

3
1231231231233.012451

如何只设置一次标志,并输出上述结果。

2 个答案:

答案 0 :(得分:0)

流在double之后插入0,因为流的浮点值输出的默认精度是6.不幸的是,没有直接的方法来检查double是否代表整数(所以你可以然后只打印整体部分)。但可以做的是将值转换为整数。

std::cout << static_cast<int>(a);

答案 1 :(得分:0)

浮点数的默认格式不支持所请求的格式。您可以使用基本上三种设置:

  • std::fixed将在小数点后使用precision()位数。
  • std::scientific将使用带有precision()数字的科学记数法。
  • std::defaultfloat将选择两种形式中较短的一种。

(还有std::hexfloat,但只是格式化一个方便机器可读的形式的数字。

可以做的是创建你自己的std::num_put<char> facet,它将值格式化为本地缓冲区,使用std::fixed格式化条带,在发送值之前跟踪零位数之一。