プログラミング

【JavaScript】0.1+0.2+0.3=0.6000000000000001????

0.1,0.2,0.3のように小数点を含む値を与えられた際にそのまま足すと、タイトルのようにすごく小さな値が末尾についてしまいます。

これは、浮動小数点数の計算において生じる精度の問題によるものです。JavaScriptの浮動小数点数は、2進数で数値を表現するため、10進数の小数を完全に正確に表現できないことがあります。その結果、小数点以下の桁数が無限に続くような場合に、数値計算の結果が予想外に少し違って見えることがあります。

具体的には、0.1や0.2といった10進数の小数は、2進数で正確に表現できないため、計算に誤差が生じることがあります。そのため、数回の加算操作を行った結果、わずかながら誤差が蓄積され、0.1 + 0.2 + 0.3 のような計算でも、理論的には 0.6 になるべきところ、JavaScriptでは 0.6000000000000001 のような結果になることがあります。

const lines = [0.1, 0.2, 0.3];
let sum = 0;
for (let i = 0; i < lines.length; i++) {
  sum += parseFloat(lines[i]);
}
console.log(sum);

このような誤差を回避するためには、計算結果を表示する際に丸める方法を取ることがあります。たとえば、計算結果を小数点以下2桁に丸める場合は、次のようにすることができます。

const lines = [0.1, 0.2, 0.3];
let sum = 0;
for (let i = 0; i < lines.length; i++) {
  sum += parseFloat(lines[i]);
}
sum = sum.toFixed(1);
console.log(sum);

この仕様に気づかずに問題を解いていたため、なぜ不正解になるのかわかりませんでした。

逐一、計算結果を確認するのは大事ですね。。。

-プログラミング
-,