JavaScript - 小数点以下の切り捨て floor() は負数に注意
JavaScript で小数点以下を切り捨てる場合は、 Mathオブジェクトのfloor()メソッドを使用します。
但し、floor()メソッドの仕様を理解していないと、 負数の場合は思うような結果を取得できません。
ここでは、小数点以下を切り捨てる場合の注意点と解決策を紹介します。
(追記)
ES2015で、単純に小数点以下を切り捨てる(整数部分を取り出す)trunc()メソッドが追加されました。
ES2015の環境が利用できる方は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()メソッドの方が簡単に取得できます。