C++ std::流双精度值没有科学,也没有固定的小数计数

c++ std::stream double values no scientific and no fixed count of decimals

本文关键字:小数 std 双精度 C++      更新时间:2023-10-16

以下代码将打印 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

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

流在双精度后插入 0 s,因为流输出浮点值的默认精度为 6。不幸的是,没有直接的方法可以检查双精度是否表示整数(因此您只能打印整数部分)。但是,您可以做的是将值转换为整数。

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

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

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

(也有std::hexfloat,但这只是将数字格式化为方便机器可读的形式)。

您可以做的是创建自己的std::num_put<char>方面,该方面使用std::fixed格式化将值格式化为本地缓冲区,然后再发送值。