当前位置: 代码迷 >> J2SE >> 为什么"12758568791275877358"转换为double类型的没有关问题,而转换为long类型的时候就不行了呢
  详细解决方案

为什么"12758568791275877358"转换为double类型的没有关问题,而转换为long类型的时候就不行了呢

热度:699   发布时间:2016-04-24 02:12:53.0
为什么"12758568791275877358"转换为double类型的没问题,而转换为long类型的时候就不行了呢?
Java code
package test;public class Test {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        String str = "12758568791275877358";        double db = Double.parseDouble(str);        System.out.println("db=" + db);        long lg = Long.parseLong(str);//这是第13行,抛错了        System.out.println("lg=" + lg);    }}


控制台输出:
db=1.2758568791275876E19
Exception in thread "main" java.lang.NumberFormatException: For input string: "12758568791275877358"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Long.parseLong(Long.java:415)
at java.lang.Long.parseLong(Long.java:461)
at test.Test.main(Test.java:13)

------解决方案--------------------
超出了long可以表示的范围
------解决方案--------------------
超过Long.MAX_VALUE了
------解决方案--------------------
Java code
127585687912758773589223372036854775807  = Long.MAX_VALUE
------解决方案--------------------
BigInteger
------解决方案--------------------
JAVA大数处理(BigInteger,BigDecimal)
java.math.* 里面的
lz可以去查api
------解决方案--------------------
long 能表示的范围
-9223372036854775808~9223372036854775807
越界了,
像这种的数字较长的,没什么特殊要求可以用String

------解决方案--------------------
探讨

引用:

BigInteger
java里有这个吗

------解决方案--------------------
数据越界了!

------解决方案--------------------
好像可以用大整数!
------解决方案--------------------
用大数据类型吧BigDecimal 类似于Long
  相关解决方案