浮点字面量是浮点常量的十进制或十六进制表示形式。
十进制浮点字面量由一个整数部分(十进制数字)、一个小数点、一个小数部分(十进制数字)和一个指数部分(e
或 E
后面跟着一个可选的 sign 标记和十进制数字)组成。可以省略掉整数部分或小数部分,也可以省略掉小数点或指数部分。指数值 exp
将尾数(整数和小数部分)缩放为 10exp
。
十六进制浮点字面量由一个 0x
或 0X
前缀、一个整数部分(十六进制数字)、一个小数点、一个小数部分(十六进制数字)和一个指数部分(p
或 P
后跟一个可选的 sign 标记和十进制数字)组成。可以省略掉整数部分或小数部分,也可以省略掉小数点,但指数部分是必需的(此语法与 IEEE 754-2008 §5.12.3 中给出的语法相匹配)。指数值 exp
将尾数(整数和小数部分)缩放为 2exp
。
为了可读性,下划线 _
可以出现在基本前缀之后或连续数字之间,这样的下划线不会改变字面量的值。
浮点字面量 = 十进制浮点字面量 | 十六进制浮点字面量 .
十进制浮点字面量 = 十进制数字 "." [ 十进制数字 ] [ 十进制指数 ] |
十进制数字 十进制指数 |
"." 十进制数字 [ 十进制指数 ] .
十进制指数 = ( "e" | "E" ) [ "+" | "-" ] 十进制数字 .
十六进制浮点字面量 = "0" ( "x" | "X" ) 十六进制尾数 十六进制指数 .
十六进制尾数 = [ "_" ] 十六进制数字 "." [ 十六进制数字 ] |
[ "_" ] 十六进制数字 |
"." 十六进制数字 .
十六进制指数 = ( "p" | "P" ) [ "+" | "-" ] 十进制数字 .
0.
72.40
072.40 // == 72.40
2.71828
1.e+0
6.67428e-11
1E6
.25
.12345E+5
1_5. // == 15.0
0.15e+0_2 // == 15.0
0x1p-2 // == 0.25
0x2.p10 // == 2048.0
0x1.Fp+0 // == 1.9375
0X.8p-0 // == 0.5
0X_1FFFP-16 // == 0.1249847412109375
0x15e-2 // == 0x15e - 2 (integer subtraction)
0x.p1 // 无效:尾数(整数和小数部分)没有数字
1p-2 // 无效:p 指数需要十六进制尾数
0x1.5e-2 // 无效:十六进制尾数需要 p 指数
1_.5 // 无效:_ 必须将连续的数字分开
1._5 // 无效:_ 必须将连续的数字分开
1.5_e1 // 无效:_ 必须将连续的数字分开
1.5e_1 // 无效:_ 必须将连续的数字分开
1.5e1_ // 无效:_ 必须将连续的数字分开