DecimalJS v10.4.3 Add方法处理大数计算结果异常求助
解决DecimalJS v10.4.3大数相加结果错误的问题
问题出在你传递给Decimal构造函数的是JS原生Number类型的超大数字——JS的Number只能精确表示到2^53(即9007199254740992),而你用的12345678907812569090001远大于这个阈值,直接用Number传入时会被JS自动舍入,导致后续Add运算的初始值就不精确,最终结果出错。
解决方案:用字符串形式初始化Decimal
把数字以字符串的形式传给Decimal构造函数,DecimalJS会完整保留每一位的精度,不受JS Number的限制。示例代码:
const Decimal = require('decimal.js'); // 用字符串初始化,而非数字 const num1 = new Decimal('12345678907812569090001'); const num2 = new Decimal('5001'); const result = num1.add(num2); console.log(result.toString()); // 输出正确结果:12345678907812569095002
额外说明
DecimalJS默认的精度配置是20位,你的这两个数字总位数没超过这个值,所以不需要调整精度参数。如果后续涉及更多位数的运算,可以通过Decimal.set({ precision: 30 })(按需设置位数)来提升全局精度,但核心问题始终是避免用超大Number初始化Decimal。
内容的提问来源于stack exchange,提问作者dtm
相关产品推荐
相关产品推荐

