我正在尝试将Integer 0550转换为String,但是使用
Integer.toString(0550);
为我提供了字符串“ 360”而不是“ 0550”。我很困惑为什么它给了我一个完全不相关的(或看起来)字符串。
答案 0 :(得分:6)
答案 1 :(得分:0)
数字0550
是360
小数的八进制表示形式。
传入基数(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