строку - добавить нули перед числом java




Целое число с ведущими нулями (6)

Восьмеричный (номер базы-8)

0123 означает octal 123, то есть 1 * 8 * 8 + 2 * 8 + 3, что равно 83. По какой-то причине восьмеричные поплавки недоступны.

Создание 0123 означает целое число 83. Создание 0123F означает плавающее 123. При преобразовании обратно в целое число остается 123.

Просто не используйте ведущие 0, если вы не имеете в виду восьмеричные. В конце концов, они не совсем полезны (и программисты, которые знают о восьмеричных числах, будут запутаны, когда увидим 09F).

Когда я пишу System.out.println(0123); Я получаю 83 но System.out.println((int)0123F); отпечатки 123 .

Почему это работает?


В Java целые литералы с начальным нулем - это восьмеричные целые числа (база 8).

1 * 8^2 + 2 * 8 + 8 = 83

Поэтому не используйте число, ведущее с 0, если вы не хотите рассматривать его как восьмеричное число.

Любое число с суффиксом «F» затем обрабатывается как число Float.

В данном примере (inf)0123F будет печатать 123 потому что 0123F, обработанный как float (123), и преобразованный в значение int остается 123.


Попробуй это:

public static String leftPad(int n, int padding) {
    return String.format("%0" + padding + "d", n);
}
leftPad(5, 3); // return "005"
leftPad(15, 5); // return "00015"
leftPad(224, 3); // return "224"
leftPad(0, 4); // return "0000"

Поскольку целочисленные литералы, начинающиеся с 0 , рассматриваются как восьмеричные числа.

См. Раздел 3.10.1 JLS


printf сделает это: http://java.sun.com/developer/technicalArticles/Programming/sprintf/

public class X
{
    public static void main(final String[] argv)
    {
        System.out.printf("%04d", 123);
        System.out.println();
    }
}

Вы также можете сделать это "%0" + size + "%d" если хотите изменить длину ... хотя, если длины были распространены, я бы, вероятно, сделал константы типа "%04d" , "%012d" и т. Д. ...


0123 -> 83
1010L -> 1010  
0101L -> 65

Номера 1010L и 0101L не находятся в двоичном представлении (просто чтобы избежать путаницы).
Эти числа представлены в десятичном представлении.

Даже в соответствии с шаблонами Regex в документах Oracle ,

\ 0n - символ с восьмеричным значением 0n (0 <= n <= 7)
\ xhh - это символ с шестнадцатеричным значением 0xhh

Таким образом, ваш номер 0101 в формате Integer или Long обрабатывается как восьмеричное представление числа.

123 => 1 * 8^2 + 2 * 8^1 + 1 * 8^0 = 83
0101 => 1 * 8^2 + 0 * 8^1 + 1 * 8^0 = 64 + 0 + 1 = 65




numbers