- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:parseIntで戻り値がNaNになるのはなぜ?)
parseIntで戻り値がNaNになるのはなぜ?
このQ&Aのポイント
- parseIntを使って文字列型から数字だけを抜き出して数値型へ変換したいのですが、下記のようにNaNになってしまいます。何が悪いのでしょうか。
- 上記のコードでは、変数aに文字列'100点満点'を代入し、parseInt関数を使って変数bにaを数値型に変換した結果を代入しています。しかし、結果はNaN(Not a Number)になっています。
- この結果は、parseInt関数が文字列を解析する際に、数値に変換できない文字('点満'や'点'など)があるためです。parseInt関数は、文字列を先頭から解析し、数字以外の文字に遭遇すると解析を停止し、その時点までに解析できた数値を返します。そのため、変数bには数値に変換できない部分(文字列'a')があったため、NaNが返されたのです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
'a'なんていう10進数は存在しませんから。 var b = parseInt('a',16); であれば,'a'を16進数と解釈して,その10進表記である 10 が正しく表示されます。 var b = parseInt('a',10); parseInt()の戻り値に対応して,変数bのデータ型はnumber型になりました。'a'という10進数は存在しませんから結果的にその数値変換は失敗してNaNが格納されましたが,変数bのデータ型がnumberであることは変わりません。 逆に言うと,typeof b が number であるから変数bには正しく数値が格納されているはず,という考えは間違っています。
その他の回答 (1)
- wormhole
- ベストアンサー率28% (1626/5665)
回答No.2
NaN は Not a Number の事なので それがわかれば、何が悪いのかはわかるかと。
質問者
お礼
ありがとうございます。
お礼
aという文字を変換する場合、10進数にない文字なので無理、16進数にはその文字があるからOKということですね。参考になりました。有難うございました。