JavaScriptでは数値が64ビットの浮動小数点数で表されます。
突然ですが、問題です。
0.3 / 0.1の答えは幾つになるでしょう。
普通に考えれば3になります。
では、JavaScriptで計算してみましょう。
2.9999999999999996となりました。
なぜならば、前述の通り、JavaScriptでは数値が64ビットの浮動小数点数で表されるからです。
詳しい仕様は Number の項目をみていただきたいのですが、ざっくりいうと、信頼できる小数点以下は15~17桁程度のようです。
計算結果が大体あっていればOKの場合、つまり、0.3 / 0.1の答えが、3でも2.9999999999999996でもOKの場合は特に対策せずに計算を行っても良いかもしれません。
しかし、絶対に3が返ってきて欲しい場合、一旦整数に直してから計算するなどの工夫が必要になります。
const significantDigits = 4; console.log(Math.round(0.3 * Math.pow(10, significantDigits)) / Math.round(0.1 * Math.pow(10, significantDigits))); // => 3
という感じで計算すれば、有効数字4桁で四捨五入した結果を計算するので、ぴったり3が返ってきます。