浮点字面量定义了其值于源文件中指定的编译时常量。
语法
数字序列 指数 后缀(可选) | (1) | |
数字序列 . 指数(可选) 后缀(可选) | (2) | |
数字序列(可选) . 数字序列 指数(可选) 后缀(可选) | (3) | |
0x | 0X 十六进制数字序列 指数 后缀(可选) | (4) | (C++17 起) |
0x | 0X 十六进制数字序列 . 指数 后缀(可选) | (5) | (C++17 起) |
0x | 0X 十六进制数字序列(可选) . 十六进制数字序列 指数 后缀(可选) | (6) | (C++17 起) |
1) 数字序列 表示无小数点的整数,此情况下指数不是可选的:1e10、1e-5L
2) 数字序列 表示带小数点的整数,此情况下指数是可选的:1.、1.e-2
3) 数字序列 表示小数。指数是可选的:3.14、.1f、0.1e-1L
4) 十六进制 数字序列 表示无基底分隔符的整数。十六进制浮点字面量的指数总不是可选的:0x1ffp10、0X0p-1
5) 十六进制 数字序列 表示带基底分隔符的整数。十六进制浮点字面量的指数总不是可选的:0x1.p0、0xf.p-1
6) 十六进制 数字序列 表示带基底分隔符的小数。十六进制浮点字面量的指数总不是可选的:0x0.123p-1、0xa.bp10l
指数 拥有下列形式
e | E 指数正负号(可选) 数字序列 | (1) | |
p | P 指数正负号(可选) 数字序列 | (2) | (C++17 起) |
1) 十进制浮点字面量的指数语法
2) 十六进制浮点字面量的指数语法
指数正负号 若存在则为 +
或 -
后缀 若存在,则为 f
、F
、l
或 L
之一。后缀决定浮点字面量的类型:
- (无后缀)定义 double
f F
定义 floatl L
定义 long double
数位间可插入作为分隔符的单引号(' ),在编译时忽略它们。 | (C++14 起) |
解释
使用十进制科学计数法,表示浮点字面量的值是有效数字乘以 10 的 指数 次幂。123e4 的数学含义是 123×104
若浮点字面量以字符序列 0x 或 0X 开始,则该浮点字面量是十六进制浮点字面量。否则,它是十进制浮点字面量。对于十六进制浮点字面量,其有效数字被解释为十六进制有理数,而指数的 数字序列 被解释成有效数字要放大的 2 的整数幂次。
| (C++17 起) |
示例
运行此代码
- #include <iostream>
- int main()
- {
- std::cout << 58. << '\n'
- << 4e2 << '\n'
- << 123.456e-67 << '\n'
- << .1E4f << '\n'
- << 0x10.1p0 << '\n';
- }
输出:
- 58
- 400
- 1.23456e-65
- 1000
- 16.0625
注解
C++17 之前,十六进制浮点字面量不是 C++ 的一部分,尽管从 C++11 起能通过 I/O 函数分析并打印它们:启用 std::hexfloat 时的 C++ I/O 流和 C I/O 流:std::printf、std::scanf 等。格式描述见 std::strtof
当前内容版权归 cppreference 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 cppreference .