学生の試験や成績などの情報を管理するシステムや、会計関連の情報を管理するシステムをを作成していると、時々小数を持つ数値の丸め処理を行う場合があります。
サーバー側のプログラムで数値の端数処理計算を行う場合もありますが、クライアント側のスクリプトで処理することもよくあります。
そこで今回は、JavaScriptで小数を含む数値を丸めて、切り捨て、切り上げ、四捨五入する方法について紹介します。
目次
整数への切り捨て、切り上げ、四捨五入
切り捨て、切り上げ、四捨五入は、計算系の処理を行うMathオブジェクトを利用して行います。
Mathオブジェクトは、数学的な定数と関数を提供するプロパティとメソッド(関数)を持つ、JavaScriptの組み込みのオブジェクトです。
整数への切り捨て
数値を整数に切り捨てるには、Mathオブジェクトのfloor()メソッドを使います。
1 |
Math.floor() |
Math.floor()メソッドは、引数として与えた数値以下の最大の整数を返します。
1 2 3 4 5 6 7 8 9 10 11 |
console.log(Math.floor(.72)); // コンソール出力: 0 console.log(Math.floor(3)); // コンソール出力: 3 console.log(Math.floor(4.997)); // コンソール出力: 4 console.log(Math.floor(-4.997)); // コンソール出力: -5 |
Math.floor()メソッドの引数にマイナス値(0未満の数値)を指定する場合は注意してください。
上記の例では、4.997を指定した時には戻り値に4が返されますが、-4.997を指定した時には戻り値に-5が返されています。
floor()メソッドは、引数として与えた数値以下の最大の整数を返しますので、マイナス値を指定するとプラス値(0以上の数値)を指定した時とは絶対値が変わります。
整数への切り上げ
数値を整数に切り上げるには、Mathオブジェクトのceil()メソッドを使います。
1 |
Math.ceil() |
Math.ceil()メソッドは、引数として与えた数値以上の最小の整数を返します。
1 2 3 4 5 6 7 8 9 10 11 |
console.log(Math.ceil(.72)); // コンソール出力: 1 console.log(Math.ceil(3)); // コンソール出力: 3 console.log(Math.ceil(4.003)); // コンソール出力: 5 console.log(Math.ceil(-4.003)); // コンソール出力: -4 |
Math.ceil()メソッドの引数にマイナス値(0未満の数値)を指定する場合は注意してください。
上記の例では、4.003を指定した時には戻り値に5が返されますが、-4.003を指定した時には戻り値に-4が返されています。
ceil()メソッドは、引数として与えた数値以上の最小の整数を返しますので、マイナス値を指定するとプラス値(0以上の数値)を指定した時とは絶対値が変わります。
整数への四捨五入
数値を整数に四捨五入するには、Mathオブジェクトのround()メソッドを使います。
1 |
Math.round() |
Math.round()メソッドは、引数として与えた数値を四捨五入して、もっとも近似の整数を返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
console.log(Math.round(.4)); // コンソール出力: 0 console.log(Math.round(.5)); // コンソール出力: 1 console.log(Math.round(3)); // コンソール出力: 3 console.log(Math.round(4.49)); // コンソール出力: 4 console.log(Math.round(-4.49)); // コンソール出力: -4 console.log(Math.round(4.5)); // コンソール出力: 5 console.log(Math.round(-4.5)); // コンソール出力: -4 console.log(Math.round(4.51)); // コンソール出力: 5 console.log(Math.round(-4.51)); // コンソール出力: -5 |
Math.round()メソッドの引数にマイナス値(0未満の数値)を指定する場合は注意してください。
小数部分の端数が0.5の場合には、四捨五入の結果が変わります。
上記の例では、4.5を指定した時には戻り値に5が返されますが、-4.5を指定した時には戻り値に-5ではなく-4が返されています。
小数点以下の桁数を指定して丸める
JavaScriptのMathオブジェクトには、小数点以下の桁数を指定して丸めるためのメソッドが用意されていません。
ですので、既にある処理を利用して指定した小数部で丸めを行う計算処理を作成する必要があります。
小数点以下の桁数を残した丸め処理を行うには、次のように処理します。
以下では説明のために、小数点以下の桁数(位置)をnとして考えます。
①の値をMathオブジェクトのメソッドで丸めます。切り捨てならfloor()メソッド、切り上げならceil()メソッド、四捨五入ならround()メソッドを使用して値を取得します。・・・②
②の値に10のn乗で割った値を取得します。・・・③
③の値が指定した小数点第n位まで残して丸めた値になります。
- 丸め処理を行うもとになる数値に10のn乗を掛けた値を取得します。・・・①
- ①の値をMathオブジェクトのメソッドで丸めます。切り捨てならfloor()メソッド、切り上げならceil()メソッド、四捨五入ならround()メソッドを使用して値を取得します。・・・②
- ②の値に10のn乗で割った値を取得します。・・・③
- ③の値が指定した小数点第n位まで残して丸めた値になります。
上記の処理を式にまとめると以下のようになります。
1 2 3 4 5 6 7 8 |
// 切り捨て floor(丸め処理を行う数値 × (10のn乗)) ÷ (10のn乗) // 切り上げ ceil(丸め処理を行う数値 × (10のn乗)) ÷ (10のn乗) // 四捨五入 round(丸め処理を行う数値 × (10のn乗)) ÷ (10のn乗) |
10のn乗を計算する時は、Mathオブジェクトのpow()メソッドが使えます。
Math.pow()メソッドは、指定した値を指定した回数乗した値を返します。
例えば値に2を指定し、回数に3を指定すると「2 × 2 × 2」を計算した結果の8を返します。
ここでは、値に10を指定し、回数に小数以下の桁数(小数点第2位まで残す場合は2)を指定します。
1 |
Math.pow(10, 小数以下の桁数) |
以下に小数点の位置を指定して、切り捨て、切り上げ、四捨五入を行うメソッドの例を記載しておきます。
小数点以下の桁数を指定して丸め処理を行うオリジナルメソッド例
小数点以下の桁数を指定して丸め処理を行うメソッド(関数)は次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 切り捨て function floorDecimal(value, n) { return Math.floor(value * Math.pow(10, n) ) / Math.pow(10, n); } // 切り上げ function ceilDecimal(value, n) { return Math.ceil(value * Math.pow(10, n) ) / Math.pow(10, n); } // 四捨五入 function roundDecimal(value, n) { return Math.round(value * Math.pow(10, n) ) / Math.pow(10, n); } |
丸め処理を行うオリジナルメソッドの使用例
上記のメソッドを使用する例を記載しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// 切り捨て var f = floorDecimal(4.365, 2); // 切り上げ var c = ceilDecimal(4.365, 2); // 四捨五入 var r = roundDecimal(4.365, 2); console.log(f); // コンソール出力: 4.36 console.log(c); // コンソール出力: 4.37 console.log(r); // コンソール出力: 4.37 |