我在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;
}
}
}
答案 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
类型。
另见: