JavaScriptの小数点切り捨てにtoFixedなどを使用してはダメ

JavaScriptの小数点切り捨てにtoFixedなどを使用してはダメ

小数点の切り捨て方法

例えばJavaScriptで123.456という数値の小数点の第2位まで表示したい場合、いくつかやり方が存在する。

一般的に使用されるのは以下の7種類だ

  1. floorを使用する
  2. toFixedを使用する
  3. toPrecisionを使用する
  4. sliceを使用する
  5. substrを使用する
  6. substringを使用する
  7. matchを使用する

floorを使用

floorは小数点の第2位まで表示したい場合、100をかけてからfloorを使用して切り捨てたあとに100で割るという手順で算出する。

var num = 123.456;
Math.floor((num * 100)) / 100);
// => 123.45

toFixed, toPrecitionを使用

toFixedとtoPrecitionは正数の場合、四捨五入して値を返すため小数点の切り捨ての際に使用してはならない。

var num = 123.456;
num.toFixed(2);
// => 123.46
num.toPrecision(5);
// => 123.46

slice, substr, substring, matchを使用

また、slice, substr, substring, matchは文字列には使用できるが数値には使用できないので注意が必要だ。

小数点の位置取得にsearchを使用しているがindexOfでも可能。

var str = '123.456';
var pos = str.search(/\./g);
// var pos = str.indexOf('.'); も可
var result = (pos !== -1) ? str.slice(0, pos + 3) : str;
// result => '123.45'

var result2 = (pos !== -1) ? str.substr(0, pos + 3) : str;
// result2 => '123.45'

var result3 = (pos !== -1) ? str.substring(0, pos + 3) : str;
// result3 => '123.45'

var result4 = (pos !== -1) ? str.match(/^\d+\.\d{2}/g)[0] : str;
// result4 => '123.45'