将以零开头的int转换为string

时间:2014-04-30 13:05:21

标签: java

我正在尝试将以0开头的int转换为存储在电话簿中的字符串,因为电话号码可以从0开始。

我试过了 -

int num = 0125;
String.format("%04d",num);

Integer.toString(num);

DecimalFormat df = new DecimalFormat("0000");
df.format(num);

每次我获得输出0085而不是0125

如何将带前导零的int转换为十进制格式的字符串?

3 个答案:

答案 0 :(得分:9)

以零开头的int值被认为是类似于十六进制数的octal number(数字从0到7)。因此你的价值:

0125

等于: 1 * 8 2 + 2 * 8 1 + 5 * 8 0 == 64 + 16 + 5 == 85

请勿尝试将电话号码表示为int。而是使用String并使用正则表达式验证它。如果将两者结合使用,您可以按照自己的类型表示电话号码,如:

public class PhoneNumber {

    private final String number;

    public PhoneNumber(String number) {
        if (number == null || !number.matches("\\d+([-]\\d+)?")) {
            throw new .....
        }
        this.number = number;
    }
}

regex只是一个匹配电话号码的示例:12340123-45678

答案 1 :(得分:1)

0开头的数字文字被视为八进制(基数为8)。 125 base 8是85 base 10(十进制)。

此外,int i = 09会因同样的原因抛出编译器错误。

请参阅09 is not recognized where as 9 is recognized

答案 2 :(得分:1)

0125实际上是85.为什么?

以0开头的数字是八进制数字。所以0125是:

5 * 8 0 + 2 * 8 1 + 1 * 8 2 = 85

请参阅JLS - 3.10.1. Integer Literals

  

八进制数字由ASCII数字0后跟一个或多个组成   ASCII数字0到7穿插着下划线,并且可以   表示正整数,零整数或负整数。