GAミント至上主義

Web Monomaniacal Developer.

あなたの欲しかった小数点以下"切り捨て"はMath.floorではなくMath.truncかもしれない

JavaScript 小数点切り捨て」で検索するとMath.floor()とparseInt()使う記事が出てきてよろしくないと思ったのでメモ。

結論

小数点以下を削除したいのならMath.trunc()使え。負の時は思ってたのと違うかも。
小数点以下切り下げならMath.floor()


正の値のときは何も問題が無いと思うけど、Math.floorは名前の通り床、下の方に寄せる関数なので整数部分が変わってしまう。
日本語で切り捨てと言ってしまっているのが問題で、切り下げと考えれば大丈夫そう。

Math.floor(100.1)
100
Math.floor(-100.1)
-101

Math.floor() - JavaScript | MDN

Math.ceilも天井、上に寄せる関数なので同じ現象が起きる。けど日本語だと小数点以下切り上げと呼ばれるので誤解は少ないかもしれない。

Math.ceil(100.1)
101
Math.ceil(-100.1)
-100

Math.truncであればtruncate、文字通り捨ててくれるので正負に関わらず整数部分は変わらない。

Math.trunc() - JavaScript | MDN
一般的な金額の用途で「小数点以下切り捨ててほしい」ってだいたいこっちな気がする

Math.trunc(100.1)
100
Math.trunc(-100.1)
-100

parseIntを使うと書いてある記事もあるけど、基数指定しないと問題起きるし、この用途ではふさわしくないと思う。
[JavaScript] 8をparseIntすると0になる問題の対処法

一般的な呼び方じゃないかもしれないけど、切り捨てと切り下げを日本語でもちゃんと分けて考えれば良さそう

小数点以下切り捨て → Math.trunc
小数点以下切り下げ → Math.floor
小数点以下切り上げ → Math.ceil