Decimal类型是否存在最大精度?39位数字转换出现精度丢失
Swift Decimal类型的精度限制说明
Swift中的Decimal并非真正的任意精度类型,它存在明确的精度上限,你的测试结果正是这个限制导致的。
核心限制说明
Decimal(底层基于Foundation的NSDecimal)采用96位二进制编码存储十进制数值,最多支持38位有效数字。当输入的数值有效数字超过38位时,超出部分会被舍入(或截断)到最接近的可表示值——你的测试字符串有39位有效数字,超出了38位的上限,因此末尾的6被截断为0,得到近似值。
官方文档依据
苹果官方文档明确标注了Decimal的精度特性:
Decimal使用96位整数作为尾数,指数范围为-128到127,因此它可以精确表示最多38位十进制有效数字的数值。超出该范围的数值会被近似为最接近的可表示值。
解决方向
如果需要支持真正的任意精度十进制运算,建议使用第三方库(比如BigDecimal)来实现,原生Decimal无法满足超38位有效数字的精确存储需求。
内容的提问来源于stack exchange,提问作者Duncan C
相关产品推荐
相关产品推荐

