public member function
<ios> <iostream>

std::ios_base::precision

get (1)
streamsize precision() const;
set (2)
streamsize precision (streamsize prec);
获取/设置浮点数的十进制精度
第一种形式(1)返回流的当前浮点精度字段的值。
第二种形式(2)将其设置为新值。

The floating-point precision determines the maximum number of digits to be written on insertion operations to express floating-point values. How this is interpreted depends on whether the floatfield format flag is set to a specific notation (either fixed or scientific) or it is unset (using the default notation, which is not necessarily equivalent to either fixed nor scientific).

对于默认的区域设置
  • 使用默认的浮点数表示法时,精度字段指定了在插入操作中表示浮点数时要显示的最大有效数字位数。请注意,它不是最小值,因此如果数字可以用少于*精度*的位数显示,则不会用尾随零填充显示数字。
  • fixedscientific 两种表示法中,精度字段都精确指定了小数点后要显示的位数,即使这包括尾随的小数零。在这种情况下,小数点前的数字与*精度*无关。

此*十进制精度*也可以使用参数化操作符 setprecision 进行修改。

参数

prec
浮点数精度的新值。
streamsize 是一个有符号整数值。

返回值

调用前的流所选的*精度*。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// modify precision
#include <iostream>     // std::cout, std::ios

int main () {
  double f = 3.14159;
  std::cout.unsetf ( std::ios::floatfield );                // floatfield not set
  std::cout.precision(5);
  std::cout << f << '\n';
  std::cout.precision(10);
  std::cout << f << '\n';
  std::cout.setf( std::ios::fixed, std:: ios::floatfield ); // floatfield set to fixed
  std::cout << f << '\n';
  return 0;
}

可能的输出
3.1416
3.14159
3.1415900000


请注意,第一个写入的数字只有 5 位,而第二个只有 6 位,但不会更多,即使流的精度现在是 10。这是因为带有默认 floatfieldprecision 只指定了要显示的*最大*位数,而不是最小位数。
第三个打印的数字显示小数点后 10 位,因为在这种情况下 floatfield 格式标志设置为 fixed

数据竞争

访问(1)或修改(2)流对象。
并发访问同一个流对象可能导致数据争用。

异常安全

基本保证:如果抛出异常,流处于有效状态。

另见