我正在尝试分离一个长数字的数字,以便它可以表示为整数数组 e.g。
12345......888 as [1,2,3,4,......8,8,8]
通常情况下,我采取n%10来取出最后一位数字,而n / 10则减去数字,即
public static void main(String[] args) {
long temp = 111111111111111110L;
while(temp>0){
System.out.println("----------");
System.out.println(temp%10);
System.out.println((int)temp%10);
temp=temp/10;
}
}
temp%10给出正确的结果。但它不能直接添加到int列表中。如果我尝试输入强制转换,它会在前几次迭代时给出不正确的结果。 输出
----------
0
-2
----------
1
9
----------
1
-5
----------
1
1
----------
1
9
----------
1
-3
----------
1
-5
----------
1
-7
----------
1
1
----------
1
1
----------
1
1
----------
1
1
----------
1
1
----------
1
1
----------
1
1
----------
1
1
----------
1
1
----------
1
1
我使用的解决方法是
int digitArray[] = new int[somenumber];
String s = Long.toString(n);
for(int i=0;i<s.length();i++){
digitArray[i]=Integer.parseInt(""+s.charAt(i));
}
但我很好奇为什么当类型转换的数字是单个数字,即在长范围内时,类型转换不能以第一种方式工作。
答案 0 :(得分:8)
表达式评估规则导致此问题。
当你做的时候
(int)temp%10
实际上,long
值temp
被投放到int
,导致integer
溢出,
你的意思
(int)(temp%10)