原因#
解决方案#
推荐使用第三方库如 bignumber.js、decimal.js 或 math.js 来解决 JavaScript 的精度问题。这些库通过重新实现计算逻辑来避免浮点数精度丢失。
- bignumber.js 和 decimal.js 是较为流行的选择,它们都提供了任意精度的十进制数值计算功能。
- math.js 则是一个更加全面的数学库,除了解决精度问题外,还支持符号计算、矩阵运算等更多功能。
本文代码示例使用 bignumber.js 来实现基本的算术:
// 加法
const accAdd = (arg1, arg2) => {
return new BigNumber(arg1 ?? 0)
.plus(new BigNumber(arg2 ?? 0)).toNumber();
}
// 减法
const accSub = (arg1, arg2) => {
return new BigNumber(arg1 ?? 0)
.minus(new BigNumber(arg2 ?? 0)).toNumber();
}
// 乘法
const accMul = (arg1, arg2) => {
return new BigNumber(arg1 ?? 0)
.times(new BigNumber(arg2 ?? 0)).toNumber();
}
// 除法
// arg1 被除数; arg2 除数。
// 公式:被除数 / 除数 = 商
const accDiv = (arg1, arg2) => {
if(args2 === 0) {
throw new Error('除数不能为 0');
}
return new BigNumber(arg1 ?? 0)
.div(new BigNumber(arg2)).toNumber();
}