画面の入力チェックをやっているときの出来事
(Aさん):また、Integer#parseIntでNumberFormatExceptionが出てるんだけど。
(Aさん):10桁の数字入力は大丈夫なんだけど、11桁数字を入力すると落ちるんだけど。
(私):ソースを見せてください
(私):うーん、IntegerのparseIntを使っているから11桁の数字を入力したとき、数字変換で桁あふれしてるんじゃないですかね?
ここで、Javaの基本型についておさらいする。
int型は符号付32ビットの数値が扱える。
すなわち-2^31 ~ 2^31-1までの数値が扱える
log10 2^31=9.33なので正の数は最大10桁まで扱える。
long型は符号付64ビットの数値が扱え、最大19桁までの数字が扱える。
IntegerのparseIntは文字列をint型の数字に変換してくれる。
もし、int型で扱える範囲以上の長さを持つ文字列が渡されたとき、NumberFormatExceptionがthrowされる。
(JavaDocにそう書いてあったよ?)
(私):LongのparseLongを使ってください。
(Aさん):他のソースもこのロジックがたくさん使われているよ?
(Aさん):修正どうしよう?
(私):・・・
(Aさん):また、Integer#parseIntでNumberFormatExceptionが出てるんだけど。
(Aさん):10桁の数字入力は大丈夫なんだけど、11桁数字を入力すると落ちるんだけど。
(私):ソースを見せてください
(私):うーん、IntegerのparseIntを使っているから11桁の数字を入力したとき、数字変換で桁あふれしてるんじゃないですかね?
ここで、Javaの基本型についておさらいする。
int型は符号付32ビットの数値が扱える。
すなわち-2^31 ~ 2^31-1までの数値が扱える
log10 2^31=9.33なので正の数は最大10桁まで扱える。
long型は符号付64ビットの数値が扱え、最大19桁までの数字が扱える。
IntegerのparseIntは文字列をint型の数字に変換してくれる。
もし、int型で扱える範囲以上の長さを持つ文字列が渡されたとき、NumberFormatExceptionがthrowされる。
(JavaDocにそう書いてあったよ?)
(私):LongのparseLongを使ってください。
(Aさん):他のソースもこのロジックがたくさん使われているよ?
(Aさん):修正どうしよう?
(私):・・・