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