NumberFormatException异常的的Long.parseLong
问题描述:
,当我尝试运行该代码(是的,我知道它会运行可怕长,是不是很漂亮):NumberFormatException异常的的Long.parseLong
DecimalFormat formatA = new DecimalFormat("000");
DecimalFormat formatB = new DecimalFormat("0000000000000000000000000000000000000000");
for(int c=0; c<=7; c++){
String binC = formatA.format(Integer.parseInt(Integer.toBinaryString(c)));
for(int d=0; d<LFSRa.length; d++){
LFSRa[d]=Character.getNumericValue((binC.charAt(d)));
}
for(long e=0; e<=1099511627775L; e++){
String binE = formatB.format(Long.parseLong((Long.toBinaryString(e))));
for(int f=0; f<LFSRb.length; f++){
LFSRb[f]=Character.getNumericValue((binE.charAt(f)));
}
}
}
我得到下面的异常
Exception in thread "main" java.lang.NumberFormatException: For input string: "10000000000000000000"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at A41.main(A41.java:76)
,我不明白为什么。我该怎么办? 有人可以向我解释这个问题吗?
答
如果你看到这一点:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
长即最大的范围为9223372036854775807,19位,而当达到10000000000000000000(20位),它会尝试这个字符串转换为长,这是超出范围,因此你会得到一个例外。
一旦您的二进制数字有20位数,重新解释它的十进制数将超过“长”的最大值。 – 2014-11-01 13:51:58