trace( Number("020") )//16になるのはなんで?
■FLASH LABO:スクリプト
天気予報データを分解して降水確率を抽出する案件があったんですが。
たとえば降水確率20%の場合、抽出した数字が"020"になるときや" 20"になるときがあって、Number()で囲うと直るだろうと思っていたらなんか降水確率が16%になってしまっていて
(゚回゚)ガーンナンデー
そんな数字は元データに入ってないのになーとおもって試行錯誤してました。
結局、ストリングの最初が0で始まるとき8進数になるようです。色の指定でおなじみの2桁の16進数も最初に0xって書くのと近い話なのかなというぼんやりと納得しました。
16進数の書き方だろうと思われる、0xの色指定の書き方でも試してみました。
逆に16進数や8進数を10進数に戻すときに使えるなーと思います。
話を戻して…020を数字としての定義に戻す方法はこういう感じで可能でした。
半角スペースが最初にあると数字にしてくれます。
試行錯誤中、一度複雑なファンクション作っちゃいましたが、
たぶんこの対処がイチバンラクかなと思いました。
たとえば降水確率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
半角スペースが最初にあると数字にしてくれます。
試行錯誤中、一度複雑なファンクション作っちゃいましたが、
たぶんこの対処がイチバンラクかなと思いました。
