※スマホ対応はしてません。

タグ: parseInt()

実数を整数に丸める4パターン(JavaScript おれおれ Advent Calendar 2011 – 7日目)

カテゴリー: JavaScript, Web

JavaScript おれおれ Advent Calendar 2011 – 7日目

Mathオブジェクトに小数点付きの数値を整数にするメソッドが幾つかあるので、parseInt()と併せてまとめてみます。

基数変換ボンバイエ(JavaScript おれおれ Advent Calendar 2011 – 5日目)

カテゴリー: JavaScript, Web

JavaScript おれおれ Advent Calendar 2011 – 5日目

1、2、3、ダー!!(←繰り上がりました)

世の中には基数というものがありまして、数値は9の次が10になる10進数だけでなく、7の次が10になる8進数、9の次がAで、B、C、D、E、Fときてようやくその次に10になる16進数、かと思えば1の次がいきなり10になる2進数と、様々に表現されます。

それを相互に変換する仕組みを考えます。

流れ

まず数値(number型の値)はあくまで「数値」であり、その表現方法たる基数とは無縁です。(何進数で言い表しても、目の前のりんごの数は変わらないでしょ?)

だので、当然の事ですが、任意の基数で表現する場合は文字列(string型の値)とします。基数を変換する場合は一度基数を捨てて数値としてから、それを目的の基数で表現しなおす、というようにします。

まとめると、こういう流れです。

  1. n進法で表現された数値の文字列を数値にする。
  2. 数値をm進法で表現した文字列にする。

    (さらに…)

parseInt()の甘い罠(JavaScript おれおれ Advent Calendar 2011 – 4日目)

カテゴリー: JavaScript, Web

JavaScript おれおれ Advent Calendar 2011 – 4日目

<input />の入力値は文字列なので、数値として扱うには変換してやる必要がありますね。そんなときには組み込み関数であるparseInt()が便利です。

var numText = document.getElementById('num').value;
var num = parseInt(numText);
console.log(num);

これで数字にしてくれます。

ところがこのコード、意図しない動作をする場合があります。

var num = parseInt("010");
console.log(num);

上記のコードのとき、何が出力されるでしょうか?

実は10にはなりません。8になります。parseInt()は基数変換の機能があるからです。

(基数て何?という方はググれば色々と解説がみつかります。中学校の数学の教科書にも乗っていたはず。)

JavaScriptの決まり事として"0"で始まる数値は8進数、というものがあります。ちなみに”0x"で始まるものは16進数です。(JavaScript以外の言語でもだいたいそうです。)

console.log(010);  // => 8
console.log(0x10);  // => 16

それをparseInt()も踏襲していて、自動的に基数を変換してくれるわけです。余計なお世話とは言ってあげないで!

第2引数で基数を指定する事ができます。

var num = parseInt("010", 10);
console.log(num);

これで安心。

以上、parseInt()を使う場合は(特に意図した場合を除き)必ず第2引数を指定するようにした方が良いというお話でした。