Чтобы преобразовать данные в текст и управлять его форматом, можно использовать операторы форматирования с общими функциями преобразования, такой как 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
'characters'.
Ширина поля в операторе форматирования является неотрицательным целым числом, которое задает количество цифр или символов в выходе при форматировании входных значений. Например, в операторе %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 |
|
Перевод формата |
|
Новая строка |
|
Возврат каретки |
|
Горизонтальная табуляция |
|
Вертикальная табуляция |
|
Символ, чей Unicode® числовое значение может быть представлено шестнадцатеричным номером, |
Пример: |
Символ, числовое значение Unicode которого может быть представлено восьмеричным числом, |
Пример: |
Оператор форматирования следует за рядом правил для форматирования синтезируемого текста к заданной ширине поля и точности. Также можно задать значения для ширины поля и точности вне спецификатора формата, и использовать пронумерованные идентификаторы с шириной поля и точностью.
Фигура иллюстрирует, как ширина поля и настройки точности влияют на выход функций форматирования. В этом рисунке, нуле после %
войдите в систему оператор форматирования означает добавлять, что продвижение обнуляет к синтезируемому тексту, а не пробелам.
Если точность не задана, то она принимает значение по умолчанию к шесть.
Если точность 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'
Таблица описывает эффект каждого оператора форматирования в примере.
Оператор форматирования | Описание |
---|---|
| 1$ |
*4$ | |
| 2$ |
.*5$ | |
| 3$ |
*6$ | |
.*7$ |
Если какой-либо из операторов форматирования включает поле идентификатора, то все операторы в спецификаторе формата должны включать поля идентификатора. Если вы используете и последовательное и непоследовательное упорядоченное расположение в том же вызове функции, то выход является усеченным в первом переключателе между последовательными и непоследовательными идентификаторами.
Допустимый синтаксис | Недопустимый синтаксис |
---|---|
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
| sprintf
| fprintf
| num2str