Чтобы преобразовать данные в текст и управлять его форматом, можно использовать операторы форматирования с общими функциями преобразования, такими как 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