JavaScript おれおれ Advent Calendar 2011 – 7日目
Math
オブジェクトに小数点付きの数値を整数にするメソッドが幾つかあるので、parseInt()
と併せてまとめてみます。
Math.ceil()
Math.floor()
Math.round()
parseInt()
※スマホ対応はしてません。
JavaScript おれおれ Advent Calendar 2011 – 7日目
Math
オブジェクトに小数点付きの数値を整数にするメソッドが幾つかあるので、parseInt()
と併せてまとめてみます。
Math.ceil()
Math.floor()
Math.round()
parseInt()
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型の値)とします。基数を変換する場合は一度基数を捨てて数値としてから、それを目的の基数で表現しなおす、というようにします。
まとめると、こういう流れです。
数値をm進法で表現した文字列にする。
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引数を指定するようにした方が良いというお話でした。