Что означают эти символические строки:% 02d% 01d?

Я смотрю на строку кода, похожую на:

sprintf(buffer,"%02d:%02d:%02d",hour,minute,second);

Я думаю, что символические строки относятся к числу числовых символов, отображаемых в час, минуту и ​​т.д. - или что-то в этом роде, я не совсем уверен.

Обычно я могу понять такую ​​вещь, но мне не удалось найти полезный справочный поиск "% 02d% 01d" в google. Кто-нибудь может пролить свет на это для меня?

Ответы

Ответ 1

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

те же правила должны применяться к Java.

в вашем случае это означает вывод целочисленных значений в 2 или более числах, первый из которых равен нулю, если число меньше или равно 9

Ответ 2

Вместо googling для %02d вы должны были искать функцию sprintf().

%02d означает "форматировать целое число с двумя цифрами, оставляя его заполнением нулями", поэтому:

Format  Data   Result
%02d    1      01
%02d    11     11

Ответ 3

Они форматируются String. Специфический синтаксис Java приведен в java.util.Formatter.

Общий синтаксис выглядит следующим образом:

   %[argument_index$][flags][width][.precision]conversion

%02d выполняет десятичное целочисленное преобразование d, отформатированное с нулевым заполнением (флаг 0) с шириной 2. Таким образом, аргумент int, значение которого имеет значение 7, будет отформатирован в "07" как String.

Вы также можете видеть эту строку форматирования, например. String.format.


Обычно используемые форматы

Это только некоторые обычно используемые форматы и не охватывают синтаксис исчерпывающе.

Нулевое заполнение для чисел

System.out.printf("Agent %03d to the rescue!", 7);
// Agent 007 to the rescue!

Ширина для оправдания

Вы можете использовать флаг - для выравнивания по левому краю; в противном случае это будет правильным оправданием.

for (Map.Entry<Object,Object> prop : System.getProperties().entrySet()) {
    System.out.printf("%-30s : %50s%n", prop.getKey(), prop.getValue());
}

Отпечатает что-то вроде:

java.version                   :                                 1.6.0_07
java.vm.name                   :               Java HotSpot(TM) Client VM
java.vm.vendor                 :                    Sun Microsystems Inc.
java.vm.specification.name     :       Java Virtual Machine Specification
java.runtime.name              :          Java(TM) SE Runtime Environment
java.vendor.url                :                     http://java.sun.com/

Для более мощного форматирования сообщений вы можете использовать java.text.MessageFormat. %n - преобразование новой строки (см. ниже).

Шестнадцатеричное преобразование

System.out.println(Integer.toHexString(255));
// ff

System.out.printf("%d is %<08X", 255);
// 255 is 000000FF

Обратите внимание, что это также использует относительную индексацию < (см. ниже).

Форматирование с плавающей запятой

System.out.printf("%+,010.2f%n", 1234.567);
System.out.printf("%+,010.2f%n", -66.6666);
// +01,234.57
// -000066.67

Для более мощного форматирования с плавающей запятой используйте DecimalFormat.

%n для разделителя строк для конкретной платформы

System.out.printf("%s,%n%s%n", "Hello", "World");
// Hello,
// World

%% для фактического % -sign

System.out.printf("It %s%% guaranteed!", 99.99);
// It 99.99% guaranteed!

Обратите внимание, что double literal 99.99 автобоксирован до double, на котором определено преобразование строки с использованием toString().

n$ для индексирования явных аргументов

System.out.printf("%1$s! %1$s %2$s! %1$s %2$s %3$s!",
    "Du", "hast", "mich"
);
// Du! Du hast! Du hast mich!

< для относительной индексации

System.out.format("%s?! %<S?!?!?", "Who your daddy");
// Who your daddy?! WHO YOUR DADDY?!?!?

Связанные вопросы

Ответ 4

Ответ от Александра относится к полным документам...

Ваш простой пример из вопроса просто распечатывает эти значения с двумя цифрами - при необходимости добавляет 0.

Ответ 6

% - это специальный символ, который вы помещаете в строки формата, например, на языке C printf и scanf (и в семействе), который в основном говорит: "Это место для чего-то другого, чтобы не печататься/читать буквально".

Например, (%02d) в строке формата для printf является заполнителем для целочисленной переменной, которая будет напечатана десятичным (%02d) и дополнена как минимум двумя цифрами, при необходимости нулями.

Фактическое целое число предоставлено вами в аргументе функции, например. printf("%02d",5);  будет печатать 05 на экране, (%01d) также работает аналогично

То же самое для Java и других языков:)