函数
<ios> <iostream>

std::scientific

ios_base& scientific (ios_base& str);
使用科学计数法表示浮点数
str 流的 floatfield 格式标志设置为 scientific

floatfield 设置为 scientific 时,浮点数值将以科学计数法书写:该值始终表示为小数点前只有一个数字,然后是小数点和与精度字段precision)一样多的小数位数。最后,这种表示法始终包含一个指数部分,由字母e后跟一个可选的符号和三个指数数字组成。

floatfield 格式标志是一个选择性标志,也是一个切换标志:它可以接受一个或多个以下值

标志值设置时的效果
fixed以定点表示法写入浮点值
scientific以科学计数法写入浮点值。
(无)以默认浮点表示法写入浮点值。
默认表示法(无)是与fixedscientific不同的floatfield值。可以通过调用str.unsetf(ios_base::floatfield)来选择默认表示法。

对于标准流,初始化时不会设置floatfield(默认表示法)。
floatfield”格式标志既是选择性标志,也是切换标志:它可以接受以下任何值,或者不接受任何值

标志值设置时的效果
fixed以定点表示法写入浮点值。
scientific以科学计数法写入浮点值。
hexfloat以十六进制格式写入浮点值。
此值与 (fixed|scientific) 相同
defaultfloat以默认浮点表示法写入浮点值。这是默认值(与无值相同,在设置任何其他 floatfield 位之前)。

对于标准流,初始化时 floatfield 格式标志被设置为 defaultfloat

可以使用成员precision修改精度字段

请注意,精度字段在默认浮点表示法与定点和科学计数法之间的处理方式不同(参见precision)。在默认浮点表示法中,精度字段指定了小数点前后要显示的有效数字的最大数量,而在定点和科学计数法中,精度字段精确指定了小数点后要显示的数字数量,即使它们是尾随的零。

参数

str
受影响的 floatfield 格式标志的流对象。
因为此函数是一个操纵符,它被设计为在不带参数的情况下,与流上的插入 (<<) 和提取 (>>) 操作结合使用(见下例)。

返回值

参数 str

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// modify floatfield
#include <iostream>     // std::cout, std::fixed, std::scientific

int main () {
  double a = 3.1415926534;
  double b = 2006.0;
  double c = 1.0e-10;

  std::cout.precision(5);

  std::cout << "default:\n";
  std::cout << a << '\n' << b << '\n' << c << '\n';

  std::cout << '\n';

  std::cout << "fixed:\n" << std::fixed;
  std::cout << a << '\n' << b << '\n' << c << '\n';

  std::cout << '\n';

  std::cout << "scientific:\n" << std::scientific;
  std::cout << a << '\n' << b << '\n' << c << '\n';
  return 0;
}

可能的输出
default:
3.1416
2006
1e-010

fixed:
3.14159
2006.00000
0.00000

scientific:
3.14159e+000
2.00600e+003
1.00000e-010


数据竞争

修改 str。对同一个流对象的并发访问可能导致数据竞争。

异常安全

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

另见