トップ | 2007/03 | FLASH LABO | trace( Number("020") )//16になるのはなんで?

trace( Number("020") )//16になるのはなんで?

■FLASH LABOスクリプト

天気予報データを分解して降水確率を抽出する案件があったんですが。
たとえば降水確率20%の場合、抽出した数字が"020"になるときや" 20"になるときがあって、Number()で囲うと直るだろうと思っていたらなんか降水確率が16%になってしまっていて
(゚回゚)ガーンナンデー
そんな数字は元データに入ってないのになーとおもって試行錯誤してました。

trace( Number( 010 ) )//8
trace( Number( "010" ) )//8
trace( Number( "020" ) )//16
trace( Number( "030" ) )//24
trace( Number( "040" ) )//32
trace( Number( "050" ) )//40
trace( Number( "060" ) )//48
trace( Number( "070" ) )//56
trace( Number( "080" ) )//エラー

結局、ストリングの最初が0で始まるとき8進数になるようです。色の指定でおなじみの2桁の16進数も最初に0xって書くのと近い話なのかなというぼんやりと納得しました。
16進数の書き方だろうと思われる、0xの色指定の書き方でも試してみました。
trace( "0xFF")//256
思ったとおりの答えが。
逆に16進数や8進数を10進数に戻すときに使えるなーと思います。
話を戻して…020を数字としての定義に戻す方法はこういう感じで可能でした。

//成功
_str = "020"
trace(Number(" "+_str))//20

//失敗
_str = "020"
trace(Number(_str))//20

半角スペースが最初にあると数字にしてくれます。
試行錯誤中、一度複雑なファンクション作っちゃいましたが、
たぶんこの対処がイチバンラクかなと思いました。