Для преобразования данных в текст и управления их форматом можно использовать операторы форматирования с общими функциями преобразования, такими как num2str и sprintf. Эти операторы управляют обозначениями, выравниванием, значимыми цифрами и т.д. Они аналогичны тем, которые используются printf функция на языке программирования C. Типичное использование форматированного текста включает текст для отображения и вывода файлов.
Например, %f преобразует значения с плавающей запятой в текст с помощью обозначения с фиксированной запятой. Настройка формата путем добавления информации к оператору, например, %.2f для представления двух цифр после десятичной метки, или %12f для представления 12 символов в выходных данных при необходимости заполняется пробелами.
A = pi*ones(1,3);
txt = sprintf('%f | %.2f | %12f', A)txt = '3.141593 | 3.14 | 3.141593'
Операторы можно комбинировать с обычным текстом и специальными символами в спецификаторе формата. Например, \n вставляет символ новой строки.
txt = sprintf('Displaying pi: \n %f \n %.2f \n %12f', A)txt =
'Displaying pi:
3.141593
3.14
3.141593'
Функции, поддерживающие операторы форматирования: compose, num2str, sprintf, fprintfи функции обработки ошибок assert, error, warning, и MException.
Оператор форматирования может иметь шесть полей, как показано на рисунке. Справа налево поля представляют собой символ преобразования, подтип, точность, ширину поля, флаги и числовой идентификатор. (Символы пробела не допускаются в операторе. Они показаны здесь только для улучшения читаемости рисунка.) Символ преобразования является единственным обязательным полем наряду с ведущим % персонаж.

Символ преобразования определяет нотацию вывода. Он состоит из одного символа и отображается последним в спецификаторе формата.
Спецификатор | Описание |
|---|---|
c | Одиночный символ. |
d | Десятичная нотация (с подписью). |
e | Экспоненциальная нотация (с использованием нижнего регистра |
E | Экспоненциальная нотация (с использованием верхнего регистра |
f | Нотация с фиксированной точкой. |
g | Более компактный |
G | То же, что и |
o | Восьмеричная нотация (без знака). |
s | Символьный вектор или строковый массив. |
u | Десятичная нотация (без знака). |
x | Шестнадцатеричная нотация (без знака, с использованием строчных букв |
X | Шестнадцатеричная нотация (без знака, с использованием прописных букв |
Например, отформатируйте число 46, используя различные символы преобразования для отображения числа в десятичном, фиксированном, экспоненциальном и шестнадцатеричном форматах.
A = 46*ones(1,4);
txt = sprintf('%d %f %e %X', A)txt = '46 46.000000 4.600000e+01 2E'
Поле подтипа представляет собой одиночный алфавитный символ, который непосредственно предшествует символу преобразования. Без поля подтипа символы преобразования %o, %x, %X, и %u рассматривать входные данные как целые числа. Чтобы рассматривать входные данные как значения с плавающей запятой и преобразовать их в восьмеричное, десятичное или шестнадцатеричное представление, используйте один из следующих спецификаторов подтипа.
b | Входные данные представляют собой значения с плавающей запятой двойной точности, а не целые числа без знака. Например, для печати значения двойной точности в шестнадцатеричном формате используется такой формат, как |
t | Входные данные представляют собой значения с плавающей запятой одинарной точности, а не целые числа без знака. |
Поле точности в операторе форматирования является неотрицательным целым числом, которое сразу следует за точкой. Например, в операторе %7.3f, точность равна 3. Для %g , точность указывает количество отображаемых значащих цифр. Для %f, %e, и %E , точность указывает количество цифр, отображаемых справа от десятичной точки.
Отображение чисел в различных точностях с помощью поля точности.
txt = sprintf('%g %.2g %f %.2f', pi*50*ones(1,4))txt = '157.08 1.6e+02 157.079633 157.08'
В то время как можно указать точность в операторе форматирования для входного текста (например, в %s оператор), обычно нет причин для этого. Если точность задана как p, и p меньше количества символов во входном тексте, то вывод содержит только первый p персонажи.
Ширина поля в операторе форматирования представляет собой неотрицательное целое число, указывающее количество цифр или символов в выводе при форматировании входных значений. Например, в операторе %7.3f, ширина поля равна 7.
Укажите другую ширину поля. Чтобы показать ширину для каждого вывода, используйте | персонаж. По умолчанию выходной текст заполняется пробелами, если ширина поля превышает число символов.
txt = sprintf('|%e|%15e|%f|%15f|', pi*50*ones(1,4))txt = '|1.570796e+02| 1.570796e+02|157.079633| 157.079633|'
При использовании при вводе текста ширина поля может определять необходимость заполнения выводимого текста пробелами. Если ширина поля меньше или равна количеству символов во входном тексте, то это не имеет эффекта.
txt = sprintf('%30s', 'Pad left with spaces')
txt = ' Pad left with spaces'
Дополнительные флаги управляют дополнительным форматированием выходного текста. В таблице описываются символы, которые можно использовать в качестве флагов.
Характер | Описание | Пример |
|---|---|---|
Знак минус ( | Выравнивание преобразованного аргумента по левому краю в его поле. | %-5.2d |
Знак «Плюс» ( | Для числовых значений всегда печатайте знак начала ( | %+5.2d%+5s |
Пространство | Вставьте пробел перед значением. | % 5.2f |
Ноль ( | Площадка с нулями, а не пробелами. | %05.2f |
Знак фунта ( | Изменить выбранные числовые преобразования:
| %#5.0f |
Выравнивание вывода вправо и влево. Поведение по умолчанию заключается в выравнивании текста по правому краю.
txt = sprintf('right-justify: %12.2f\nleft-justify: %-12.2f',... 12.3, 12.3)
txt =
'right-justify: 12.30
left-justify: 12.30 '
Отображение + знак для положительных чисел. По умолчанию опущено ведущее + знак для положительных чисел.
txt = sprintf('no sign: %12.2f\nsign: %+12.2f',... 12.3, 12.3)
txt =
'no sign: 12.30
sign: +12.30'
Площадка слева с пробелами и нулями. Поведение по умолчанию заключается в заполнении пробелами.
txt = sprintf('Pad with spaces: %12.2f\nPad with zeroes: %012.2f',... 5.2, 5.2)
txt =
'Pad with spaces: 5.20
Pad with zeroes: 000000005.20'
Примечание
В операторе форматирования можно указать несколько флагов.
По умолчанию используются такие функции, как sprintf вставка значений из входных аргументов в выходной текст в последовательном порядке. Для обработки входных аргументов в порядке, не являющемся последовательным, укажите порядок, используя числовые идентификаторы в спецификаторе формата. Укажите несравнимые аргументы с целым числом сразу после % знак, за которым следует $ знак.
| Упорядочено последовательно | Упорядочено по идентификатору |
|---|---|
sprintf('%s %s %s',...
'1st','2nd','3rd')
ans =
'1st 2nd 3rd'
| sprintf('%3$s %2$s %1$s',...
'1st','2nd','3rd')
ans =
'3rd 2nd 1st'
|
Специальные символы могут быть частью выходного текста. Но поскольку они не могут быть введены как обычный текст, для их представления требуются определенные последовательности символов. Чтобы вставить специальные символы в выходной текст, используйте любую из последовательностей символов в таблице.
Специальный символ | Представление в спецификаторе формата |
|---|---|
Одинарная кавычка |
|
Процент символа |
|
Обратная косая черта |
|
Тревога |
|
Клавиша Backspace |
|
Веб-канал формы |
|
Новая линия |
|
Возврат каретки |
|
Горизонтальная вкладка |
|
Вертикальная вкладка |
|
Символ, числовое значение Юникода ® которого может быть представлено шестнадцатеричным числом , |
Пример: |
Символ, числовое значение Юникода которого может быть представлено восьмеричным числом, |
Пример: |
Оператор форматирования следует набору правил форматирования выходного текста до заданной ширины и точности поля. Можно также задать значения ширины и точности поля вне спецификатора формата и использовать пронумерованные идентификаторы с шириной и точностью поля.
На рисунке показано, как параметры ширины и точности поля влияют на вывод функций форматирования. На этом рисунке ноль после % вход в оператор форматирования означает добавление начальных нулей к выходному тексту, а не символов пробела.

Если точность не указана, по умолчанию она равна шести.
Если точность p меньше числа цифр в дробной части ввода, то только p цифры отображаются после десятичной точки. Дробное значение округляется на выходе.
Если точность p больше числа цифр f в дробной части ввода, то p цифры отображаются после десятичной точки. Дробная часть расширяется вправо с помощью p-f обнуляет в выходных данных.
Если ширина поля не указана, по умолчанию устанавливается значение p+1+n, где n - количество цифр во всей части входного значения.
Если ширина поля w больше, чем p+1+n, то вся часть выходного значения заполняется слева w-(p+1+n) дополнительные символы. Дополнительные символы являются пробелами, если оператор форматирования не включает 0 флаг. В этом случае дополнительными символами являются нули.
Можно задать ширину и точность поля, используя значения из списка последовательных аргументов. Использовать звездочку (*) вместо полей ширины поля или полей точности оператора форматирования.
Например, отформатировать и отобразить три числа. В каждом случае используйте звездочку, чтобы указать, что ширина поля или точность зависят от входных аргументов, следующих за спецификатором формата.
txt = sprintf('%*f %.*f %*.*f',... 15,123.45678,... 3,16.42837,... 6,4,pi)
txt = ' 123.456780 16.428 3.1416'
В таблице описаны эффекты каждого оператора форматирования в примере.
Оператор форматирования | Описание |
|---|---|
| Укажите ширину в качестве следующего входного аргумента, |
| Укажите точность в качестве следующего входного аргумента, |
| Задайте ширину и точность в качестве следующих входных аргументов, |
Можно смешивать два стиля. Например, получить ширину поля из следующего входного аргумента и точность из спецификатора формата.
txt = sprintf('%*.2f', 5, 123.45678)txt = '123.46'
Можно также указать ширину поля и точность в качестве значений из списка несекретивных аргументов, используя альтернативный синтаксис, показанный на рисунке. В операторе форматирования задайте ширину и точность поля со звездочками, которые следуют за пронумерованными идентификаторами и $ знаки. Задайте значения ширины поля и точности с помощью входных аргументов, следующих за спецификатором формата.

Например, отформатировать и отобразить три числа. В каждом случае используйте нумерованный идентификатор, чтобы указать, что ширина поля или точность зависят от входных аргументов, следующих за спецификатором формата.
txt = sprintf('%1$*4$f %2$.*5$f %3$*6$.*7$f',... 123.45678, 16.42837, pi, 15, 3, 6, 4)
txt = ' 123.456780 16.428 3.1416'
В таблице описывается эффект каждого оператора форматирования в примере.
Оператор форматирования | Описание |
|---|---|
|
|
| |
|
|
| |
|
|
| |
|
Если какой-либо из операторов форматирования включает поле идентификатора, то все операторы в спецификаторе формата должны включать поля идентификаторов. Если в одном и том же вызове функции используется как последовательное, так и непоследовательное упорядочение, то выходной сигнал усекается при первом переключении между последовательным и непоследовательным идентификаторами.
| Допустимый синтаксис | Недопустимый синтаксис |
|---|---|
sprintf('%d %d %d %d',...
1,2,3,4)
ans =
'1 2 3 4'
| sprintf('%d %3$d %d %d',...
1,2,3,4)
ans =
'1 '
|
Если вызов функции предоставляет больше входных аргументов, чем операторов форматирования в спецификаторе формата, то операторы используются повторно. Однако только вызовы функций, использующие операторы форматирования с последовательным упорядочением, используются повторно. При использовании пронумерованных идентификаторов нельзя повторно использовать операторы форматирования.
| Допустимый синтаксис | Недопустимый синтаксис |
|---|---|
sprintf('%d',1,2,3,4)
ans =
'1234'
| sprintf('%1$d',1,2,3,4)
ans =
'1'
|
При использовании пронумерованных идентификаторов, когда входные данные являются вектором или массивом, выходные данные не содержат форматированных данных.
| Допустимый синтаксис | Недопустимый синтаксис |
|---|---|
v = [1.4 2.7 3.1];
sprintf('%.4f %.4f %.4f',v)
ans =
'1.4000 2.7000 3.1000'
| v = [1.4 2.7 3.1];
sprintf('%3$.4f %1$.4f %2$.4f',v)
ans =
1×0 empty char array
|
compose | fprintf | num2str | sprintf