大学生からの Web 開発

会社の人に見つかってぽよぽよしてきた

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 という名前の関数に突っ込むのはよくない
  • 素朴に以下のような関数を定義しよう
  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);
}

参考