yoshiweb.NET

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

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

サーバーからランキングとか桁数を合わせてある文字列を受け取った場合に注意ですね!
trace( Number ("11") ); // 11 ←普通にOK
trace( parseInt("11") ); // 11 ←普通にOK

trace( Number ("000011") ); // 9 ←8進数として解釈された
trace( parseInt("000011") ); // 9 ←8進数として解釈された
trace( parseInt("000011", 8) ); // 9
trace( parseInt("000011", 10) ); // 11 ←10進数で変換するように指示するとOK
trace( parseInt("000011", 16) ); // 17


文字列に小数点を含むと Number() でも10進数として変換してくれます。
trace( Number ("000011.0") ); // 11 ←キタ—!
trace( parseInt("000011.0") ); // 11 ←キタ—!
trace( parseInt("000011.0", 8) ); // 9
trace( 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) ); // 9
trace( 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進数はサポートされているのか

投稿日 : 2007年04月19日 - yoshiweb - カテゴリ: Flash

コメント

投稿者 : buy cialis generic online

Hello Dear, are you really visiting this website daily,
if so afterward you will definitely obtain good
experience.
2023年10月12日 14時41分29秒

投稿者 : vpn special coupon code 2024

We're a group of volunteers and opening a new scheme
in our community. Your website provided us with valuable information to work on. You have done a formidable job and our whole community will be grateful to you.
2024年04月03日 19時09分27秒

投稿者 : vpn coupon 2024

My programmer is trying to convince me to move to .net from PHP.
I have always disliked the idea because of the costs.
But he's tryiong none the less. I've been using WordPress on various websites for about a year and
am concerned about switching to another platform.
I have heard very good things about blogengine.net.
Is there a way I can import all my wordpress posts into it?

Any help would be greatly appreciated!
2024年04月04日 12時28分24秒