Вопрос:
Я смотрю на строку кода, похожую на:
sprintf(buffer,»%02d:%02d:%02d»,hour,minute,second);
Я думаю, что символические строки относятся к числу числовых символов, отображаемых в час, минуту и т.д. – или что-то в этом роде, я не совсем уверен.
Обычно я могу понять такую вещь, но мне не удалось найти полезный справочный поиск “% 02d% 01d” в google. Кто-нибудь может пролить свет на это для меня?
Лучший ответ:
те же правила должны применяться к Java.
в вашем случае это означает вывод целочисленных значений в 2 или более числах, первый из которых равен нулю, если число меньше или равно 9
Ответ №1
Вместо googling для %02d вы должны были искать функцию sprintf().
%02d означает “форматировать целое число с двумя цифрами, оставляя его заполнением нулями”, поэтому:
Format Data Result %02d 1 01 %02d 11 11 Ответ №2
Они форматируются String. Специфический синтаксис Java приведен в java.util.Formatter.
Общий синтаксис выглядит следующим образом:
%[argument_index$][flags][width][.precision]conversion
%02d выполняет десятичное целочисленное преобразование d, отформатированное с нулевым заполнением (флаг 0) с шириной 2. Таким образом, аргумент int, значение которого имеет значение 7, будет отформатирован в «07» как String.
Вы также можете видеть эту строку форматирования, например. String.format.
Содержание
- Обычно используемые форматы
- Нулевое заполнение для чисел
- Ширина для оправдания
- Шестнадцатеричное преобразование
- Форматирование с плавающей запятой
- %n для разделителя строк для конкретной платформы
- %% для фактического % -sign
- n$ для индексирования явных аргументов
- < для относительной индексации
- Связанные вопросы
- Обычно используемые форматы
- Нулевое заполнение для чисел
- Ширина для оправдания
- Шестнадцатеричное преобразование
- Форматирование с плавающей запятой
- %n для разделителя строк для конкретной платформы
- %% для фактического % -sign
- n$ для индексирования явных аргументов
- < для относительной индексации
- Связанные вопросы
Обычно используемые форматы
Это только некоторые обычно используемые форматы и не охватывают синтаксис исчерпывающе.
Нулевое заполнение для чисел
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?!?!?
Связанные вопросы
- Почему формат строк (Object… args) определяется как статический метод?
- экранирование символов форматирования в java String.format
- Лучше ли использовать String.format над строкой Конкатенация в Java?
- Должен ли я использовать Javas String.format(), если производительность важна?
- Понимание строк $в формате Javas
- java decimal Строковый формат
- разница между system.out.printf и String.format
- Какие классы вы используете для создания строковых шаблонов? – MessageFormat с примером
Ответ №3
Ответ от Александра относится к полным документам…
Ваш простой пример из вопроса просто распечатывает эти значения с двумя цифрами – при необходимости добавляет 0.
Ответ №4
http://en.wikipedia.org/wiki/Printf#printf_format_placeholders
В статье рассказывается о классе функций printf на нескольких языках, начиная с 50-х и до наших дней.
Ответ №5
% – это специальный символ, который вы помещаете в строки формата, например, на языке C printf и scanf (и в семействе), который в основном говорит: “Это место для чего-то другого, чтобы не печататься/читать буквально”.
Например, (%02d) в строке формата для printf является заполнителем для целочисленной переменной, которая будет напечатана десятичным (%02d) и дополнена как минимум двумя цифрами, при необходимости нулями.
Фактическое целое число предоставлено вами в аргументе функции, например. printf(«%02d»,5); будет печатать 05 на экране, (%01d) также работает аналогично
То же самое для Java и других языков:)