Javascriptで小数を含む計算を行うとき、計算結果の小数点2位以下を丸める。

下記のように、摂氏から華氏に変換する演算をJavascriptで行う際

((c * 9.0) / 5.0) * 10 + 32.0

たとえば、

c = -17

だと、計算結果が、

1.3999999999999986

になってしまい、実際に表示する値としてはふさわくしない形となってしまいます。

なぜ、このようになるのかは、Javascriptの浮動小数点の扱いによるようです。以下のエントリーが参考になりました。

c.f. 『JavaScript、お前もか(小数点を含む計算について)』http://detaramedia.blog95.fc2.com/blog-entry-81.html

このような結果を避けるために、toFixedメソッドを使えばいいか!と考えましたが、
c.f. http://www.ajaxtower.jp/js/number_class/index5.html

これだけだと、整数にも小数点以下が表示されてしまいます。

1.toFixed(1) => 1.0

よって、算出結果が小数かどうか判定して、小数の場合、toFixedを当てることにしました。

var rt = ((c * 9.0) / 5.0) * 10 + 32.0 ;
if( f.match(/^-?[0-9]+\.[0-9]+$/) ){
    return rt.toFixed(1);
}
else{
    return rt;
}

しかし、以下のエントリーにもっといい方法がありました。

[メモ] 以下のエントリーも大変参考になりました。

Javascriptで小数点以下X桁を四捨五入する
http://blog.mudaimemo.com/2008/10/javascriptx.html

よって、小数点2位以下を丸める場合、以下が良いのではないかと思います。

var rt = ((c * 9.0) / 5.0) * 10 + 32.0 ;
return Math.round(rt * 100) / 100;

Leave a Reply