Skip to Content

浮点(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

注意

  • 浮点与 decimal 双向禁止隐式转换与混算,互转用显式 float64(x) / decimal64(x)(见类型转换);
  • 浮点相等比较前应确定误差预算,再决定用 == 还是容差比较;
  • 数值格式化输出(定点、百分比等)见字符串插值。
最后更新于 2026年10月7日