# std::fixed, std::scientific, std::hexfloat, std::defaultfloat

< cpp‎ | io‎ | manip

定义于头文件 `<ios>` |  |
std::ios_base& fixed( std::ios_base& str ); | (1) |
std::ios_base& scientific( std::ios_base& str ); | (2) |
std::ios_base& hexfloat( std::ios_base& str ); | (3) | (C++11 起)
std::ios_base& defaultfloat( std::ios_base& str ); | (4) | (C++11 起)

修改浮点输入/输出的默认格式化。

1) 如同以调用 str.setf(std::ios_base::fixed, std::ios_base::floatfield) ，设置流 `str` 的 `floatfield` 为 `fixed`
2) 如同以调用 str.setf(std::ios_base::scientific, std::ios_base::floatfield) ，设置流 `str` 的 `floatfield` 为 `scientific`
3) 如同以调用 str.setf(std::ios_base::fixed | std::ios_base::scientific, std::ios_base::floatfield) ，设置流 `str` 的 `floatfield` 同时为 `fixed` 和 `scientific` 。这启用十六进制浮点格式化。
4) 如同以调用 str.unsetf(std::ios_base::floatfield) ，设置流 `str` 的 `floatfield` 为零，这异于 fixed 和 scientific 。

这是一个 I/O 操纵符，可用如 out << std::fixed 的表达式对任何 std::basic_ostream 类型的 `out` 或用如 in >> std::scientific 的表达式对任何 std::basic_istream 类型的 `in` 调用。

### 参数

str | - | 到 I/O 流的引用

### 返回值

`str` （到操纵后的流的引用）

### 注意

十六进制浮点格式化忽略流精度规定，如 std::num_put::do_put 的规定所要求。

### 示例

    #include <iostream>
    #include <sstream>

    int main()
    {
        std::cout << "The number 0.01 in fixed:      " << std::fixed << 0.01 << '\n'
                  << "The number 0.01 in scientific: " << std::scientific << 0.01 << '\n'
                  << "The number 0.01 in hexfloat:   " << std::hexfloat << 0.01 << '\n'
                  << "The number 0.01 in default:    " << std::defaultfloat << 0.01 << '\n';
        double f;
        std::istringstream("0x1P-1022") >> std::hexfloat >> f;
        std::cout << "Parsing 0x1P-1022 as hex gives " << f << '\n';
    }

输出：

    The number 0.01 in fixed:      0.010000
    The number 0.01 in scientific: 1.000000e-02
    The number 0.01 in hexfloat:   0x1.47ae147ae147bp-7
    The number 0.01 in default:    0.01
    Parsing 0x1P-1022 as hex gives 2.22507e-308

### 参阅

setprecision | 更改浮点精度 (函数)