Чтобы преобразовать данные в текст и управлять его форматом, можно использовать операторы форматирования с общими функциями преобразования, такими как num2str и sprintf. Эти операторы управляют обозначением, выравниванием, значащими цифрами и так далее. Они аналогичны тем, которые используются printf функция на языке программирования С. Типичные способы использования форматированного текста включают текст для файлов отображения и вывода.
Для примера, %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