yoshiweb.NET-blog



HOME > blog > 0から始まる文字列を数値に変換する際の落とし穴
« Flash クックブック | Number.toString( radix )のワナ »

0から始まる文字列を数値に変換する際の落とし穴

Number() や parseInt() で文字列を数値に変換するときに 0x から始まる文字列は16進数、0から始まる文字列は8進数としてと解釈されます。

サーバーからランキングとか桁数を合わせてある文字列を受け取った場合に注意ですね!
trace( Number  ("11")         ); // 11 ←普通にOKtrace( parseInt("11")         ); // 11 ←普通にOKtrace( Number  ("000011")     ); // 9  ←8進数として解釈されたtrace( parseInt("000011")     ); // 9  ←8進数として解釈されたtrace( parseInt("000011", 8)  ); // 9trace( parseInt("000011", 10) ); // 11 ←10進数で変換するように指示するとOKtrace( parseInt("000011", 16) ); // 17


文字列に小数点を含むと Number() でも10進数として変換してくれます。
trace( Number  ("000011.0")     ); // 11 ←キタ—!trace( parseInt("000011.0")     ); // 11 ←キタ—!trace( parseInt("000011.0", 8)  ); // 9trace( parseInt("000011.0", 10) ); // 11 ←どっちでも使える!?trace( parseInt("000011.0", 16) ); // 17


でも parseInt() は文字列を「整数」に変換する関数なので小数点以下がある文字列に使えません。
trace( Number  ("000011.5")     ); // 11.5  ←キタ—!trace( parseInt("000011.5")     ); // 11    ←残念...trace( parseInt("000011.5", 8)  ); // 9trace( parseInt("000011.5", 10) ); // 11    ←残念...trace( parseInt("000011.5", 16) ); // 17


サーバーからの文字列に少数点があるのとないのが混在してると困りますね。
parseInt("000011",  10)); // ← 整数のときはこれでNumber  ("000011.5"    ); // ← 少数点があるときはこれ?


そんな時は parseFloat() が使えます。
trace( parseFloat("000011")   ); // 11    ←キタ—!trace( parseFloat("000011.0") ); // 11    ←キタ—!trace( parseFloat("000011.5") ); // 11.5  ←キタ—!trace( parseFloat("11")       ); // 11    ←キタ—!trace( parseFloat("11.0")     ); // 11    ←キタ—!trace( parseFloat("11.5")     ); // 11.5  ←キタ—!



えぇ、つまり parseFloat() 使ったことがなかった。感動!!って書き込みです。

10進数以外の文字列には使えないみたいですね。
trace( Number    ("0xff") ); // 255  ←キタ—!trace( parseInt  ("0xff") ); // 255  ←キタ—!trace( parseFloat("0xff") ); // 0    ←残念...


8進数なんて使ったことないけど、0から始まる文字列が8進数として解釈されるかどうかの挙動については下記参照。
FN0109004 - 0で始まる数値が0に変わってしまう
FN0109005 - 8進数はサポートされているのか

投稿者 yoshiweb - Flash - 2007/04/19 - 20:16:32 - Permalink
このエントリーをはてなブックマークに追加
タグ:

Comments

コメントしてください

コメントを書く

※ スパム対策のためコメント内の URL は全角で書いてください。あとで半角に変換します。