java中的余数运算符有问题:为什么:
(int)2147483648l % 10
给出一个负数(-8)?
那是因为(int) 2147483648l
是-2147483648
。你正在投射long
toint
并且它超出了界限。
以下示例可能有用:
public class Example1
{
public static void main(String args[])
{
int b = (int)2147483648l;
System.out.println("Value of b: "+ b);
System.out.println("Output1: "+b % 10);
long a = 2147483648l;
System.out.println("Value of a: "+ a);
System.out.println("Output2: "+ a % 10);
}
}
输出
Value of b: -2147483648
Output1: -8
Value of a: 2147483648
Output2: 8
铸造问题。由于变窄导致数据丢失。您正在将 long 转换为 int。
阅读有关转换的更多信息。
使用“long”代替“int”。您也可以在不进行类型转换的情况下使用它
您得到一个负数,因为您将 a 转换long
为int
. 在您的情况下,一个可能的解决方法只是利用任何小数 x mod 10 只是小数点最低位(在个位)中的数字这一事实。例如,156 mod 10 是 6,因为 156 除以 10 是 15 + (6/10)。所以你可以做这样的事情
//get the number and make it a string
String numberAsString = String.valueOf(number);
//get the integer value of the last character in the string (basically the lowest place)
int mod10 = Integer.parseInt(numberAsString.charAt(numberAsString.length() - 1));
这适用于任何整数number
,只要你想要的是number % 10