十进制浮点(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日
