Integer.toString()给出错误的转换

时间:2019-03-24 01:22:07

标签: java

我正在尝试将Integer 0550转换为String,但是使用

Integer.toString(0550);

为我提供了字符串“ 360”而不是“ 0550”。我很困惑为什么它给了我一个完全不相关的(或看起来)字符串。

2 个答案:

答案 0 :(得分:6)

0550被Java解释为octal(基于8)。

尝试删除前导零。

进一步阅读
Literals in Java

答案 1 :(得分:0)

数字0550360小数的八进制表示形式。

传入基数(8)即可得到"550"

Integer.toString(0550, 8);

编辑

JVM无法检测是否在整数值前放置了0(八进制)或x(十六进制)。因此,您将无法打印出来。您需要告诉程序您期望输入为八进制或十六进制。

public class DisplayInteger {
    public static void main(String[] args) {
        displayInteger(0550);
        displayInteger(550);
    }

    private static void displayInteger(int value) {
        System.out.println("Actual  : " + value);
        System.out.println("Base  8 : " + formatAxOctal(value));
        System.out.println("Base 10 : " + formatAsDecimal(value));
        System.out.println("Base 16 : " + formatAsHex(value) + System.lineSeparator());
    }

    private static String formatAxOctal(int value) {
        return formatInteger(value, 8, "0");
    }

    private static String formatAsDecimal(int value) {
        return formatInteger(value, 10, "");
    }

    private static String formatAsHex(int value) {
        return formatInteger(value, 16, "0x");
    }

    private static String formatInteger(int value, int radix, String prefix) {
        return String.format("%s%s", prefix, Integer.toString(value, radix));
    }
}

输出

Actual  : 360
Base  8 : 0550
Base 10 : 360
Base 16 : 0x168

Actual  : 550
Base  8 : 01046
Base 10 : 550
Base 16 : 0x226