gpt4 book ai didi

java - Java 中的 Long 到 int 的转换给出了不正确的结果

转载 作者:行者123 更新时间:2023-12-03 18:11:48 25 4
gpt4 key购买 nike

我正在尝试分离一个长数字的数字,以便它可以表示为整数数组例如

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));
}

但我很好奇,当被类型转换的数字是个位数时,即在 long 范围内时,为什么类型转换无法以第一种方式工作。

最佳答案

表达式评估规则导致了这个问题。

当你做的时候

(int)temp%10

实际上,大的 longtemp 被转换为 int 导致 integer 溢出,

你的意思是

(int)(temp%10)

关于java - Java 中的 Long 到 int 的转换给出了不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43293456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com