複雑な理由
JavaScript の Math オブジェクトは、整数に丸めるためのメソッドを提供しています。 設定した小数点以下の桁数に丸めたい場合は、自分で処理する必要があります。 この記事では、浮動小数点演算の詳細については触れませんが、簡単に言うと、ほとんどのプログラミング言語では、多くの10進法の分数を近似することしかできない2進法の浮動小数点表現を使用しています。
丸めエラー
小数点以下を丸める最も一般的な方法は、Number.prototype.toFixed()
を利用するために浮動小数点を 10 の累乗にすることです。 どちらも機能しますが、小数の 5 が切り上げではなく切り捨てられることがあります。
Number((1.005).toFixed(2)); // 1 instead of 1.01
Math.round(1.005*100)/100; // 1 instead of 1.01
より良い解決策
丸め込みの問題は、指数記法で表された数字を使用することで回避できます。
Number(Math.round(1.005+'e2')+'e-2'); // 1.01
それをもっと使いやすいように抽象化すると次のようになります:
function round(value, decimals) { return Number(Math.round(value+'e'+decimals)+'e-'+decimals);}round(1.005, 2); // 1.01