« phpでメールの件名が切れる件 | トップページ | さくらインターネットのphp.ini設定 »

JavascriptのParseIntに騙されないで

Javasctiptのように、型の宣言がない言語で問題になるのは数値なのか数字(数の文字列)なのか勝手に判断して処理してくれちゃうことです。

表示の都合上前ゼロを付けているのだけど、実際は計算に使う数字だったりして、その場合、ものの本(や、解説サイト)では 数値に変換するのにparseIntを使うとよい、などと教えてくれたりしています。

しかし!!

perseIntでは "001"という文字列を "1"としてはくれるものの、"011"はなぜか "9" になっちゃいます。
evalも然り。

前ゼロ処理された2ケタ以上の文字列は正しく変換できないみたいです。

前ゼロを削除する関数とか作っちゃえばいいんですけども、面倒くさいし。。。

ということで、お悩みのかたのために、私が前からひそかにやっていた方法を伝授。

その方法とは。

1を掛けちゃうんですね!!

×  var num1=parseInt(document.keisan1.elements[0].value);

○  var num1=parseInt(document.keisan1.elements[0].value * 1);

ということです。

超簡単なんですが、いつもGoogle先生やものの本をうっかり信じてしまって、5~6分ほどハマってから「あっ、そうだった」って感じなので覚書しときます。

|

« phpでメールの件名が切れる件 | トップページ | さくらインターネットのphp.ini設定 »

コメント

正しく変換できないのではなく、011だと8進数表記として扱われてるんでしょうね。あまり利用されないけど残ってしまっている伝統的な仕様です。

投稿: sippofactory | 2011年12月29日 (木) 13時30分

○ var num1=parseInt(document.keisan1.elements[0].value, 10);//10進数

投稿: parseIntを信じて | 2013年1月18日 (金) 16時38分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/520403/53589478

この記事へのトラックバック一覧です: JavascriptのParseIntに騙されないで:

« phpでメールの件名が切れる件 | トップページ | さくらインターネットのphp.ini設定 »