当前位置: 代码迷 >> J2SE >> 一段很简单的类型转换代码,但就是不知道错哪了
  详细解决方案

一段很简单的类型转换代码,但就是不知道错哪了

热度:69   发布时间:2016-04-23 20:34:36.0
一段很简单的类型转换代码,但就是不知道哪里错了
public class LongTest {

/**
 * @param args
 */
public static void main(String[] args) {
            
 String s = "116052312205661322001" ;
 System.out.println(Long.parseLong(s));
}
}

结果:
Exception in thread "main" java.lang.NumberFormatException: For input string: "116052312205661322001"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at test.LongTest.main(LongTest.java:11)
------解决方案--------------------
Long.MAX_VALUE = 9223372036854775807

9223372036854775807
116052312205661322001

明显长了一块,是不是这个原因?
------解决方案--------------------
楼上正解,超出long的取值范围了
换BigDecimal就可以了

String s = "116052312205661322001" ;
 System.out.println(new BigDecimal(s));

------解决方案--------------------
引用:
Long.MAX_VALUE = 9223372036854775807

9223372036854775807
116052312205661322001

明显长了一块,是不是这个原因?

超过long 的最大取值了
------解决方案--------------------
引用:
超出long的表示范围了,BigInteger或者BigDecimal

正解
------解决方案--------------------
明显超过范围了。。。
试试BigInteger吧,BigInteger其实是字符串,我记得貌似BigInteger加减乘除有点麻烦。
------解决方案--------------------
你看看Long.MAX_VALUE
Long的最大值9223372036854775807
116052312205661322001这个很明显的超出了长度的
  相关解决方案