JavaScript - 小数点以下の切り捨て floor() は負数に注意

JavaScript で小数点以下を切り捨てる場合は、 Mathオブジェクトのfloor()メソッドを使用します。

但し、floor()メソッドの仕様を理解していないと、 負数の場合は思うような結果を取得できません。

ここでは、小数点以下を切り捨てる場合の注意点と解決策を紹介します。

(追記)

ES2015で、単純に小数点以下を切り捨てる(整数部分を取り出す)trunc()メソッドが追加されました

ES2015の環境が利用できる方はtrunc()メソッドの方が簡単に取得できます。

参考記事: JavaScript - 小数点以下の切り捨てはtrunc()がおすすめ


正数での小数点以下切り捨て

正数の場合、floor()メソッドを使用して何の問題もありません。


// 正数
console.log(Math.floor(2.18)); // 2
console.log(Math.floor(2.78)); // 2

負数での小数点以下の切り捨て

負数の場合、floor()メソッドを使用すると次のような結果となります。


// 負数
console.log(Math.floor(-2.18)); // -3
console.log(Math.floor(-2.78)); // -3

「-2」ではなく、「-3」が返ってきます。

これはfloor()メソッドの仕様です。

floor()メソッドの仕様


floor(引数)

引数として与えた数以下の最大の整数を返す。

floor(-2.18)とした場合、「-2.18」以下の最大の整数は「-3」です。

ですから、戻り値は「-3」となります。

解決策

負数の場合に小数点以下を切り捨てるには、floor()メソッドではなく、 ceil()メソッドを使うといいでしょう。


ceil(引数)

引数として与えた数以上の最小の整数を返す。


// 負数
console.log(Math.ceil(-2.18)); // -2
console.log(Math.ceil(-2.78)); // -2

次のサンプルコードのように、正数と負数で場合わけをして、

正数の場合は floor()メソッド、 負数の場合は ceil()メソッドを使うとうまくいきます。


var num = -2.18;

if (num > 0){
	console.log(Math.floor(num));
} else {
	console.log(Math.ceil(num));
}

// 実行結果 
// -2

まとめ

・小数点以下を切り捨てる場合は、通常Mathオブジェクトのfloor()メソッドを使います。

・但し、floor()メソッドの仕様により、負数の場合は思うような結果が取得できません。

・負数の場合は ceil()メソッドを使うとうまく取得できます。

(追記)

ES2015で、単純に小数点以下を切り捨てる(整数部分を取り出す)trunc()メソッドが追加されました

ES2015の環境が利用できる方はtrunc()メソッドの方が簡単に取得できます。

参考記事: JavaScript - 小数点以下の切り捨てはtrunc()がおすすめ