Skip to Content

十进制浮点(Decimal)

decimal 家族按十进制计算(IEEE 754-2008 decimal):十进制里写得清的数(0.1、1.10 这类),在它这里是精确的。需要精确计算的场景用它;图形与物理用浮点。

三档宽度

字面量后缀 d32 / d64 / d128,有效数字 7 / 16 / 34 位。类型注解写全名 decimal32 / decimal64 / decimal128(没有裸 decimal 名):

print(1.10d32 + 1.10d32); print(0.1d64 + 0.2d64 == 0.3d64);
2.2 True

转换与混合矩阵

  • int 到 decimal 隐式,但仅当无损(val d: decimal64 = 3; 合法)。
  • 窄 decimal 到宽 decimal 隐式放宽。
  • float 与 decimal 双向禁止隐式转换与混算(含比较),互转用显式 float64(x) / decimal64(x)(见类型转换)。
  • 同家族内部宽度不同可以一起算,结果向宽的一侧看齐:1.5f32 + 2.0f64 得 3.5(float 家族同理)。

显示与相等

打印采用最短表示形式:尾零不保留(1.10d64 打出 1.1),插值同面。相等是纯数值相等,尾零与档位不参与,1.10d64 == 1.1d64 为 True。十进制的精确性让 0.1d64 + 0.2d64 == 0.3d64 完全成立。

注意

  • 除零是运行期硬错:mush: MS6000: Runtime error: decimal division by zero.;量级溢出同走运行期 MS6000;decimal 没有 Inf / NaN。
  • 位运算、移位、取反不可用(MS3155)。
  • ** 幂运算只收整数指数。
  • decimal 不参与数值的 ToString(format) 格式化面;需要固定位数输出时先 float64(x) 转换,或用插值的对齐位。
最后更新于 2026年10月7日