что означают эти символьные строки:% 02d% 01d? - PullRequest
22 голосов
/ 31 июля 2010

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

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

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

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

Ответы [ 6 ]

43 голосов
/ 31 июля 2010

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

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

Format  Data   Result
%02d    1      01
%02d    11     11
27 голосов
/ 31 июля 2010

Они форматируют 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

%% для действительного % -знака

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

Обратите внимание, что double литерал 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's your daddy");
// Who's your daddy?! WHO'S YOUR DADDY?!?!?

Смежные вопросы

21 голосов
/ 31 июля 2010

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

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

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

0 голосов
/ 24 сентября 2015

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

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

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

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

0 голосов
/ 31 июля 2010

http://en.wikipedia.org/wiki/Printf#printf_format_placeholders

В статье рассказывается о классе функций printf на нескольких языках с 50-х годов до наших дней.

0 голосов
/ 31 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...