JavaScript

レシピ

数値

四捨五入、切り捨て、切り上げ

浮動小数点数に対して四捨五入、切り捨て、切り上げする方法について解説します。

この記事のポイント

  • 「切り捨て」や「切り上げ」など、四捨五入のやり方によって4つのメソッドを使い分ける
  • 第n位以下を残して四捨五入するときは先に小数点を移動してから計算する

目次

小数点以下の値を整える

浮動小数点数に対して、次の4種類あるメソッドを実行すると小数点以下の数値を整えることができます。

メソッド名実行内容
Math.roundメソッド小数点以下の値を四捨五入する
Math.floorメソッド小数点以下の値を切り捨てる
Math.ceilメソッド小数点以下の値を切り上げる
Math.truncメソッド正の数値については小数点以下を切り捨てて、負の数値については小数点以下を切り上げる

以下の例では変数number1number6までの6種類の数値に対して、それぞれのメソッドを実行してconsole.logメソッドを実行した結果です。

コード例

var number1 = 1.1;
var number2 = 1.8;
var number3 = 0.7;
var number4 = 0.2;
var number5 = -1.22;
var number6 = -1.85;

// 四捨五入
console.log(Math.round(number1)); // 1
console.log(Math.round(number2)); // 2
console.log(Math.round(number3)); // 1
console.log(Math.round(number4)); // 0
console.log(Math.round(number5)); // -1
console.log(Math.round(number6)); // -2

// 切り捨て
console.log(Math.floor(number1)); // 1
console.log(Math.floor(number2)); // 1
console.log(Math.floor(number3)); // 0
console.log(Math.floor(number4)); // 0
console.log(Math.floor(number5)); // -2
console.log(Math.floor(number6)); // -2

// 切り上げ
console.log(Math.ceil(number1)); // 2
console.log(Math.ceil(number2)); // 2
console.log(Math.ceil(number3)); // 1
console.log(Math.ceil(number4)); // 1
console.log(Math.ceil(number5)); // -1
console.log(Math.ceil(number6)); // -1

// 正の数値は切り捨て、負の数値は切り上げ
console.log(Math.trunc(number1)); // 1
console.log(Math.trunc(number2)); // 1
console.log(Math.trunc(number3)); // 0
console.log(Math.trunc(number4)); // 0
console.log(Math.trunc(number5)); // -1
console.log(Math.trunc(number6)); // -1

Math.truncメソッドだけ少し特殊に見えますが、正の数値の場合はMath.floorメソッドと同じ切り捨てを行い、負の数値ならMath.ceilメソッドと同じ切り上げを行います。

小数点以下の指定した桁数を残す

上記の4種類のメソッドはすべて小数点以下の値に対して実行して整数の値を戻り値とします。
しかし場合によっては小数点の第n位以下に対して四捨五入したいケースなどもあります。

以下の例では小数点の第2位まで残して、第3位より下の値は四捨五入した値を取得します。

コード例

var number1 = 1.1005;
var number2 = 1.1069;
var number3 = 0.0012;
var number4 = 0.0296;
var number5 = -1.5245;
var number6 = -1.0089;

// (1)小数点の位置を移動する
number1 *= 100;
number2 *= 100;
number3 *= 100;
number4 *= 100;
number5 *= 100;
number6 *= 100;

// (2)四捨五入
number1 = Math.round(number1);
number2 = Math.round(number2);
number3 = Math.round(number3);
number4 = Math.round(number4);
number5 = Math.round(number5);
number6 = Math.round(number6);

// (3)小数点の位置を戻す
console.log(number1 /= 100); // 1.1
console.log(number2 /= 100); // 1.11
console.log(number3 /= 100); // 0
console.log(number4 /= 100); // 0.03
console.log(number5 /= 100); // -1.52
console.log(number6 /= 100); // -1.01

(1)の箇所で10のn乗を掛けて小数点の位置を移動させてから(2)の箇所の四捨五入を実行します。
今回は小数点の第2位までを残すため、100を掛けて小数点を2つ後ろに移動しています。

そして最後に、(3)の箇所で10のn乗で割って小数点の位置を元に戻すことで、意図した小数点以下の数値を残した値を取得します。

変数number1number3のように、四捨五入すると小数点の第2位が0のときは省略されてしまいます。
これは数値(Number)の仕様なので致し方ありませんが、toFixedメソッドで文字列(String)として値を取得すると小数点以下の桁数を揃えた形で取得することができます。

コード例

var number1 = 1.1005;
var number2 = 1.1069;
var number3 = 0.0012;
var number4 = 0.0296;
var number5 = -1.5245;
var number6 = -1.0089;

// (1)小数点の位置を移動する
number1 *= 100;
number2 *= 100;
number3 *= 100;
number4 *= 100;
number5 *= 100;
number6 *= 100;

// (2)四捨五入
number1 = Math.round(number1);
number2 = Math.round(number2);
number3 = Math.round(number3);
number4 = Math.round(number4);
number5 = Math.round(number5);
number6 = Math.round(number6);

// (3)小数点の位置を戻す
number1 /= 100;
number2 /= 100;
number3 /= 100;
number4 /= 100;
number5 /= 100;
number6 /= 100;

// (4)小数点の第2位までを文字列で取得
console.log(number1.toFixed(2)); // '1.10'
console.log(number2.toFixed(2)); // '1.11'
console.log(number3.toFixed(2)); // '0.00'
console.log(number4.toFixed(2)); // '0.03'
console.log(number5.toFixed(2)); // '-1.52'
console.log(number6.toFixed(2)); // '-1.01'

(3)の小数点の位置を戻すところまでは先ほどと同じ処理になりますが、(4)の箇所でそれぞれの変数に対してtoFixedメソッドを実行して、小数点以下の桁数を残した文字列を取得しています。
toFixedメソッドはパラメータに指定した桁数を残すことができます。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。