JavaScriptで四捨五入 |
ブラウザのJavaScriptでMath.roundを実行していますのですが
計算誤差が発生しているため、その対応に困っています。
たとえば
11490 * 22.15
の計算結果を四捨五入したいとします。
計算結果は254503.5となるのですが
JavaScriptで計算すると254503.49999999997と誤差が発生します。
この値でRoundで四捨五入すると
254503と切り捨ての値になってしまいます。
var total = 11490 * 22.15;
//四捨五入
total = Math.round(total);
それではと、小数第二位をまず四捨五入してから
小数第一位を四捨五入する処理を行ってみました。
var total = 11490 * 22.15*10;
//四捨五入1
total = Math.round(total)/10;
//四捨五入2
total = Math.round(total);
たしかに254504と四捨五入できました。
しかし、この処理で
11490 * 22.101
を計算してみます。
計算結果は253940.49です。
JavaScript上の計算結果も253940.49と正しく
そのまま四捨五入すると253940となります。
しかし、上記処理では
小数第二位をまず四捨五入することによって253940.5となり、
続けて小数第一位を四捨五入するため
結果は253941と切り上げになってしまいます。
驚いたことにJavaScriptの計算結果を
サーバ側で検証せずにそのまま利用しているため
計算誤差があった場合でもそのまま処理されてしまいます。
いっそサーバ側で再計算させるかな・・・