浮点(Float)
带小数点的字面量属于浮点类型(IEEE 754)。浮点按位宽三档:f16(半精度)、f32(单精度,默认)、f64(双精度)。计算速度快,是图形、游戏、科学计算的主力;需要精确十进制的场景用十进制浮点。
字面量
| 写法 | 含义 |
|---|---|
1.5 | 小数形式;无后缀默认 float32 |
1e10 / 1E-3 / 1.5e+2 | 指数写法 |
3.14f32 / 2.0f64 / 0.5f16 | 显式宽度后缀(大小写不敏感) |
1f32 / 1.5e3f64 | 无小数点、指数带后缀,均合法 |
- 小数点后必须紧跟数字:
1.与.5都不是浮点。 - 单字母后缀
f/d/h不存在,必须是完整的f16/f32/f64。 - 没有十六进制浮点。
显示行为
print 只打值,不补零:2.0 打出来是 2。f32 值按「最短往返串」渲染(0.1f32 打出来是 0.1)。科学计数有宽度阈值,f32 面约 1e9 就转指数,f64 面约 1e16:
print(0.1f32);
print(1e9);
print(1e10);
print(1f32, 1.5e3f64);0.1
1E+09
1E+10
1 1500精度
每种精度在自己的 IEEE 域里运算:
print(0.1 + 0.2);
print(0.1 + 0.2 == 0.3);
print(0.1f64 + 0.2f64);
print(0.1f64 + 0.2f64 == 0.3f64);
print(16777216f32 + 1);0.3
True
0.30000000000000004
False
16777216- 裸小数与
f32运算都在单精度域:0.1 + 0.2 == 0.3为 True,是 float32 舍入恰好抵消的结果;f64 保留更多中间精度,误差随之显现(0.30000000000000004)。 16777216f32 + 1就近偶舍入回16777216:单精度 24 位尾数装不下第 16777217 个数。- 溢出得
±∞,0/0得NaN,都不 crash。 - 字面量写后缀再赋给更宽目标时,先按自身宽度舍入再放宽:
val x: float64 = 0.3f16;得0.300048828125。裸小数无自身宽度,按目标直取(val y: float64 = 0.3;得0.3)。
常用函数
- 浮点同样有
ToString(format)格式化。 Math模块提供三角、取整与Pi/E常量。- 注意
Math.Sqrt是可失败函数(负开方是运行期错误),这里用try?消费:
val x = 2.5;
print(x.ToString("F1"));
print(try? Math.Sqrt(4.0), try? Math.Sqrt(-1.0));
print(Math.Pi);2.5
2 null
3.1415927注意
最后更新于 2026年10月7日
