目录
一、浮点常量的两种形式
-
小数形式
-
必须包含整数部分或小数部分(或两者)。
-
必须包含小数点
.
。 -
示例:
3.14159 // 合法(整数+小数部分) .618 // 合法(等价于0.618,省略整数部分) 42. // 合法(等价于42.0,省略小数部分)
-
-
指数形式(科学计数法)
-
必须包含指数部分(由
e
或E
引入的带符号整数)。 -
必须包含小数点
.
或整数/小数部分(或两者)。 -
示例:
314159E-5L // 合法(等价于314159 * 10^-5,L表示long double类型) 2.5E3 // 合法(等价于2500.0) 1e-4 // 合法(等价于0.0001)
-
二、语法规则
形式 | 必需部分 | 规则说明 |
---|---|---|
小数形式 | 整数部分 或 小数部分(至少一个) | 必须包含小数点 . ,不可省略。 |
指数形式 | 指数部分(e /E + 整数) | 小数点 . 或整数/小数部分必须存在其一。 |
三、合法与非法示例分析
合法示例:
-
小数形式,包含整数部分3.14159
3
和小数部分14159
。 -
指数形式,整数部分314159E-5L
314159
,指数部分E-5
,后缀L
表示long double
类型。
非法示例:
-
错误原因:指数部分不完整,缺少指数值(如510E
510E3
是合法的)。 -
错误原因:没有小数点或指数部分,210f
210
是整型常量,后缀f
只能用于浮点常量(应写为210.0f
)。 -
错误原因:小数点后没有小数部分,且指数部分前无有效数字(应写为.e55
0.e55
或.1e55
)。
四、后缀指定类型
浮点常量可通过后缀指定具体类型:
后缀 | 类型 | 示例 |
---|---|---|
无后缀 | double | 3.14 |
f /F | float | 3.14f 、2.5E3F |
l /L | long double | 3.14L 、1e-5L |
五、注意事项
-
负号问题:
负号-
是运算符,非常量本身的一部分。例如:-3.14
等价于对3.14
取负。 -
可读性建议:
-
显式写出小数点前后的数字(如
0.5
比.5
更清晰)。 -
避免混淆:
1E3
比1e3
更易读(两者等价)。
-
-
类型范围依赖实现:
float
、double
、long double
的精度和范围由编译器和平台决定。 -
十六进制浮点常量(C++17起):
支持十六进制浮点表示,例如0x1.2p3
(等价于(1 + 2/16) * 2^3 = 9.0
),指数部分用p
或P
表示。
六、总结表
形式 | 必需部分 | 合法示例 | 非法示例 | 后缀规则 |
---|---|---|---|---|
小数形式 | 整数或小数部分(至少一个) | 3.14 , .5 , 7. | 210f , .e55 | f 、F 、l 、L |
指数形式 | 指数部分(e /E + 整数) | 1e3 , 2.5E-2 | 510E , e5 | 同上 |
七、常见错误及修正
错误代码 | 错误原因 | 修正方案 |
---|---|---|
510E | 缺少指数值 | 510E3 或 510.0 |
210f | 整型常量无法直接加 f 后缀 | 210.0f |
.e55 | 缺少有效数字 | 0.1e55 或 .1e55 |