数字格式异常错误

时间:2016-04-13 16:57:57

标签: java exception

每当我运行程序时,我都会收到此错误:

BigDecimal lower = new BigDecimal("1000001520");
BigDecimal upper = new BigDecimal("9999997560");
int var = 2520;

String strL = lower.toString();
Integer intL = Integer.valueOf(strL);

String strU = upper.toString();
Integer intU = Integer.valueOf(strU);

该程序有两个几乎相同的do-while循环,第一个完美地工作。我只遇到第二个问题。

intL = intL + var;

intU = intU - var;

两个数字的位数相同,并以相同的方式转换为整数。两者在循环中的处理方式几乎相同。

public static void main(String[] args){
    int idx = 0;
    int[] myArray = new int[5];
    Random rnd = new Random();
    int val = rnd.nextInt(76);
    do{
        if(numExistInArray(val, myArray))
            val = rnd.nextInt(76);    //if val exist in array, generate another number
        else
            myArray[idx++] = val;     //if val not exist in array, fill array
    }while(idx != myArray.length);    //do not exit loop till all numbers are filled        
}

public static boolean numExistInArray(int val, int[] array){
    for(int x=0; x<array.length; x++)
        if(array[x] == val)
            return true;
    return false;
}

我也试过这个,没有从BigDecimal转换为String,直接输入数字到String,但仍然有同样的错误。

编辑我使用的是BigDecimal,因为它是我老师希望我们在工作中使用的一部分。我知道不需要它。

2 个答案:

答案 0 :(得分:3)

显然你会得到一个数字格式异常,因为可以存储在整数中的最大值是2,147,483,647,小于9,999,997,560。

另一方面,1,000,001,520小于2,147,483,647,这就是为什么工作正常。

(根据Tunaki的建议编辑)仅供参考 - 此外你真的不必使用BigDecimal,因为看起来你需要它的唯一原因是将它转换为整数。所以这不是必需的。

同样不需要Integer,因为您似乎不需要引用类型,因此原始类型int应该是apt。此外,在你的for循环中,你正在添加和减去Integer中的值,这将导致不必要的装箱和拆箱,效率非常低。所以使用原型int会更好。

答案 1 :(得分:-2)

使用intValue()方法

将BigInteger转换为Integer
BigDecimal lower = new BigDecimal("1000001520");
BigDecimal upper = new BigDecimal("9999997560");

Integer intBL = lower.intValue();
Integer intBU = upper.intValue();