JavaScript で小数点を切り捨てたいときはどうするか
- 仕事のコード読んでたら
parseInt(foo / bar)
ってのが出てきた- WebStorm が「あかんで」って教えてくれた
- やりたいこととしては「小数点の切り捨て」
- parseInt() - JavaScript | MDN
parseInt()関数は、第1引数の文字列を解析(パース)し、第2引数に与えられた基数(数学的記数法の底)にもとづく整数を返します。 第一引数は文字列
- まあキャストされるから動くけど良くない
parseInt
の挙動
Math.floor
でええやん(?)
- よくない
- Math.floor では、負の数のとき
parseInt
とは戻り値が異なる
どうするか
- ES2015 では Math.trunc() - JavaScript | MDN という関数がある
Math.trunc() 関数は、引数として与えた数の小数部の桁を取り除くことによって整数部を返します。
- ただし IE はサポートしていない!!!!!!!
- IE であっても、
parseInt
という名前の関数に突っ込むのはよくない
- IE であっても、
素朴に以下のような関数を定義しよう
function truncateDecimal(n) { if (n >= 0) { return Math.floor(n) } else { return Math.ceil(n) } }
Math.trunc
のポリフィル使ったほうがいいな
// Math.trunc() - JavaScript | MDN https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc Math.trunc = Math.trunc || function(x) { return x < 0 ? Math.ceil(x) : Math.floor(x); }