Java给出了错误的结果

时间:2013-08-28 20:05:46

标签: java

我在java程序中有一个方法,它在简单的乘法上给出了错误的结果,我不确定是怎么回事。也许这是我需要扩展的日食环境 - 我只是不知道。

简单如下:987,654,321 * 10.显然应该是9,876,543,210。相反,我得到1,286,608,618。世界上有什么?该方法只是读取字符并将标记化的数字(不超过10位)添加到列表中。其他一切都很好,但出于某种原因它讨厌这个数字。

public void number(char dig, boolean lc){
    int num = Character.getNumericValue(dig);
    if(number == 0){
        number = num;
    }
    else{           
        number = number*10 + num;
    }
    if(lc){
        if(String.valueOf(number).trim().length() <= intLength){
            tokenList.add(number);
            number = 0;
            return;
        }
        else{
        System.out.println("Error in number entry. Invalid or exceeded length: " + number); 
            number = 0; 
            return;
            }   
    }
}

1 个答案:

答案 0 :(得分:8)

您的值远远超出整数范围。以下声明:

System.out.println(9_876_543_210L);  // This is what you are claiming should have come
System.out.println(Integer.MAX_VALUE);

打印:

9876543210
2147483647

因此,当您执行987654321 * 10时,该值无法放入int,因此会溢出,并且您会得到该结果。

替代?使用long类型。


另见: