JavaScript での小数の丸め

複雑な理由

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です