format
Назначение
Функция format представляет собой функцию форматирования: каждый из аргументов конвертируется в строки, которые в свою очередь комбинируются в одну строку в соответствии с условием, определяемым строкой форматирования.
Аргументы
Функция format требует наличия минимум двух аргументов, первый из которых является шаблоном, или строкой форматирования.
Строка форматирования включает текст, в котором специальные директивы будут заменены строками; эти строки представляют собой результат форматирования используемых аргументов. Функция format принимает несколько форм директивов в строке форматирования:
-
Наследуемые строки форматирования наследования: %spec, где spec - спецификация формата. spec используется для опций форматирования, например ширина, выравнивание, основание для форматирования чисел, а также другие специальные флаги:
-
%|spec| где spec - спецификация формата. Данный синтаксис ограничивается вертикальными чертами и используется для улучшения читаемости строки форматирования, но главным образом - для того, чтобы сделать символ преобразования типов в spec опциональным:
-
%N%: Эта простое позиционное обозначение запрашивает форматирование N-ого аргумента - без каких-либо опций форматирования.
Подробная информация о спецификации формата
Спецификация spec имеет форму:
[ N$ ] [ flags ] [ width ] [ . precision ] [ argument-type ] conversion-specifier
Поля в квадратных скобках являются опциональными. Каждое поле имеет следующие определения:
-
N $ (опциональное поле) указывает, что спецификация формата применяется к N-ому аргументу (позиционная спецификация формата). Если это поле отсутствует, аргументы берутся по одному. (в дальнейшем это считается ошибкой числа аргумента)
-
flags (флаги) - последовательность любых следующих элементов:
Флаг
Значение
'-'
выравнивание по левому краю
'='
выравнивание по центру
'_'
внутреннее выравнивание
'+'
показывать значок для положительных чисел
'#'
показывать основание числа и десятичный знак
'0'
заполнять нулями (вставляются после значка или индикатора основания)
' '
если строка не начинается с + или -, вставить пробел перед конвертируемой строкой
-
width (ширина) определяет минимальную ширину для строки, которая является результатом конверсии. При необходимости к строке будет применено выравнивание и она будет заполнена символами, которые определяются либо на потоке посредством манипуляторов, либо строкой форматирования (например, flags '0', '-', ..)
Ширина не просто определяется на потоке конверсии. Для поддержки результата типов, определяемых пользователем (которые могут обращаться к оператору<< множество раз для нескольких чисел), ширина регулируется после конверсии потока ко всему объекту аргумента, в коде класса форматирования. -
precision (точность; ставится после точки) определяет точность потока
-
Если на выходе имеется число с плавающей точкой, устанавливает максимальное число цифр
-
после десятичной точки в фиксированном или научном формате
-
в целом в режиме по умолчанию ('общий режим', например %g)
-
-
При использовании с типом char s или S имеет другое значение: конвертируемая строка усекается до первых символов char, означающих точность.
Окончательное заполнение по ширине выполняется после усечения.
-
-
conversion-specifier (спецификатор преобразования) не включает ограниченный набор типов в зависимый аргумент, а просто определяет флаги ввода-вывода, связанные со спецификацией типа:
Спецификатор преобразования
Значение
b
результат булевое-значение - строка
p или x
шестнадцатеричный результат
o
восьмеричный результат
a
шестнадцатеричная экспоненциальная нотация
e
научный формат float
f
фиксированный формат float
g
формат общий -по умолчанию- float
X, A, E, F или G
то же значение, что и аналогичные символы в нижнем регистре; символы верхнего регистра используются для числовых результатов. (экспонент, шестнадцатеричных цифр и т.д.)
d, i или u
результат десятичного типа
s или S
строковый результат
c или C
1-символьный результат
%
печать символа %
Спецификатор преобразования 'n' игнорируется (как и соответствующий аргумент), т.к. в данном контексте он не подходит. |
new format-specifications
-
как указано в таблице по флагам, были добавлены флаги выравнивания по центру и внутреннего выравнивания (' = ', and ' _ ').
-
%{nt} , где n - положительное число, добавляет абсолютную табуляцию. Это означает, что при необходимости формат будет заполнять строку символами до тех пор, пока длина созданной строки не достигнет n символов.
-
%|nTX| добавляет табуляцию таким же образом, но для заполнения используется символ X вместо заполняющих char в потоке (который в состоянии по умолчанию является для потока space).