JavaScriptの浮動小数点と小数点以下N桁での四捨五入

JavaScriptは浮動小数点数を使用しているため
たまに、計算結果として小数点以下に凄い00000000の桁がくっついてくることがあります。

-0.1 + -0.4 = -0.30000000000000004

参考:
JavaScriptでの小数点の計算の誤差について – Qiita

そこで、小数点以下を削る方法として四捨五入するケースが出てくるのですが
1を100%とした倍率の計算など、1から2までジャンプしてしまうと端折りすぎなので
整数まで丸めずにある程度の精度の高い値を取得したい場面もあります。

Math.roundで四捨五入

Math.roundの四捨五入は、小数点以下の桁数を指定できないため
小数点以下を残したい場合は、100倍した値を四捨五入し、再び100で割る流れになります。

n = Math.round( (0.1 - 0.4) * 100) / 100;

toFixedで四捨五入

toFixedを使うと、指定した桁数での四捨五入を実行できます。

n = (0.1 - 0.4).toFixed(2);

ただし、返される値は
四捨五入し、指定桁数まで0で埋めてある文字列です!

文 字 列 で す !

値を計算に使用したい場合は、このように数値へ戻さないとNaN地獄に突入します。

n = +(0.1 - 0.4).toFixed(2);

前述のよう、toFixedは0で桁を埋めてくれるので
このピンチインアウト倍率表示サンプルのよう
0ではなく0.00と表示をさせたい場合にはもってこいです。

関連記事