1. long number = 564;
2. String str = number+"";
3. char[] num = str.toCharArray();
4. number = number - num[0];
/* The value of number is 511 */
我试图使用这段代码从数字中减去数字的第一个数字。
在调试过程中,我发现num [0]的值是53.任何人都可以解释我在这里缺少的东西。
答案 0 :(得分:1)
我建议你改变你的第四行:
number = number - Long.parseLong(Character.toString(num[0]));
基本上,这里发生的事情是我首先将char
(num[0]
)转换为字符串,然后将字符串解析为long
。
或者,您甚至不需要将字符串转换为char数组!使用charAt()
获取char:
number = number - Long.parseLong(Character.toString(str.charAt(0)));
答案 1 :(得分:1)
当您使用二元运算符" - "较小的数据类型(在本例中为char)被提升为long,返回num [0](' 5')的ASCII值,即53.要获得num [0]的实际面值,请将其转换为字符串并将其解析为Long,正如Sweeper指出的那样。
答案 2 :(得分:0)
将数字转换为字符串,提取第一个字符,转换回数字并减去它只是感觉不对。为什么不直接处理数字时提取第一个数字。这样的事情可以做到:
long number = 564;
int digits = 0;
assert (number > 0);
for (long num = number; num > 1; num = num / 10 ) {
digits += 1;
}
int firstDigit = (int) (number / Math.pow(10, digits -1));
number = number - firstDigit;
System.out.println(number);
如果你想获得所有数字:
long number = 564;
int digits = 0;
assert (number > 0);
for (long num = number; num > 1; num = num / 10 ) {
digits += 1;
}
for (int digit = digits - 1; digit >= 0; digit--) {
int currentDigit = (int) (number / Math.pow(10, digit)) % 10;
System.out.println(currentDigit);
}