原因#
解決方案#
推薦使用第三方庫如 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();
}