原因#
解決策#
JavaScript の精度の問題を解決するために、bignumber.js、decimal.js、または math.js などのサードパーティライブラリの使用をおすすめします。これらのライブラリは、浮動小数点数の精度損失を回避するために計算ロジックを再実装しています。
- bignumber.js と decimal.js は人気のある選択肢であり、任意の精度の 10 進数計算機能を提供しています。
- 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();
}