转换为char数组后Long变量的意外值

时间:2016-10-07 06:07:17

标签: java char long-integer

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.任何人都可以解释我在这里缺少的东西。

3 个答案:

答案 0 :(得分:1)

我建议你改变你的第四行:

number = number - Long.parseLong(Character.toString(num[0]));

基本上,这里发生的事情是我首先将charnum[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);
    }