Данные о формате в строку или вектор символов
форматирует данные в массивах str
= sprintf(formatSpec
,A1,...,An
)A1,...,An
использование операторов форматирования задано formatSpec
и возвращает получившийся текст в str
. sprintf
функциональные форматы значения в A1,...,An
в порядке следования столбцов. Если formatSpec
строка, затем так выход str
. В противном случае, str
вектор символов.
Чтобы возвратить несколько частей форматированного текста как массив строк или массив ячеек из символьных векторов, используйте compose
функция.
[
возвращает сообщение об ошибке как вектор символов, когда операция неудачна. В противном случае, str
,errmsg
]
= sprintf(formatSpec
,A1,...,An
)errmsg
isempty.
переводит последовательности символа ESC в str
= sprintf(literalText
)literalText
, такой как \n
и \t
. Это возвращает все другие неизменные символы. Если literalText
содержите оператор форматирования (такой как %f
), затем str
отбрасывания это и все символы после.
Отформатируйте число с плавающей запятой с помощью %e
F
, и %g
спецификаторы.
A = 1/eps;
str_e = sprintf('%0.5e',A)
str_e = '4.50360e+15'
str_f = sprintf('%0.5f',A)
str_f = '4503599627370496.00000'
str_g = sprintf('%0.5g',A)
str_g = '4.5036e+15'
Объедините буквенный текст со значениями массивов, чтобы создать вектор символов.
formatSpec = 'The array is %dx%d.';
A1 = 2;
A2 = 3;
str = sprintf(formatSpec,A1,A2)
str = 'The array is 2x3.'
Чтобы возвратить форматированный текст как строку, задайте formatSpec
как строка вместо вектора символов, когда вы вызываете sprintf
функция.
Начиная в R2017a, можно создать строки с помощью двойных кавычек. Преобразуйте данные и возвратите результат как строку.
formatSpec = "The current time is: %d:%d %s"; A1 = 11; A2 = 20; A3 = 'a.m.'; str = sprintf(formatSpec,A1,A2,A3)
str = "The current time is: 11:20 a.m."
Преобразуйте входную строку. Входные массивы, которые содержат текст или могут быть векторами символов или строками.
A1 = 2;
A2 = 35;
A3 = "p.m.";
str = sprintf(formatSpec,A1,A2,A3)
str = "The current time is: 2:35 p.m."
Явным образом преобразуйте значения с двойной точностью в целые числа.
str = sprintf('%d',round(pi))
str = '3'
Задайте минимальную ширину печатного значения.
str = sprintf('%025d',[123456])
str = '0000000000000000000123456'
0
отметьте в %025d
спецификатор формата запрашивает начальные нули в выходе.
Переупорядочьте входные значения с помощью n$
идентификатор положения.
A1 = 'X'; A2 = 'Y'; A3 = 'Z'; formatSpec = ' %3$s %2$s %1$s'; str = sprintf(formatSpec,A1,A2,A3)
str = ' Z Y X'
C = { 1, 2, 3 ; 'AA','BB','CC'}; str = sprintf(' %d %s',C{:})
str = ' 1 AA 2 BB 3 CC'
Синтаксис C{:}
создает список, разделенный запятыми массивов, которые содержат содержимое каждой ячейки от C
в порядке следования столбцов. Например, C{1}==1
и C{2}=='AA'
.
formatSpec
— Формат выходных полейФормат выходных полей, заданных операторов форматирования использования. formatSpec
также может включать обычный текст и специальные символы.
formatSpec
может быть вектор символов в одинарных кавычках, или, запускающийся в R2016b, скаляре строки.
Оператор форматирования
Оператор форматирования запускается со знака процента, %
, и концы с символом преобразования. Символ преобразования требуется. Опционально, можно задать идентификатор, флаги, ширину поля, точность, и выделить подтипы в операторах между %
и символ преобразования. (Пробелы недопустимы между операторами и показаны здесь только для удобочитаемости).
Символ преобразования
Эта таблица показывает символы преобразования, чтобы отформатировать числовые и символьные данные как текст.
Тип значения | Преобразование | Детали |
---|---|---|
Целое число, подписанное |
| Основа 10 |
Целое число, без знака |
| Основа 10 |
| Базируйтесь 8 (восьмеричный) | |
| Основывайте 16 (шестнадцатеричных), строчных букв | |
| То же самое как | |
Число с плавающей запятой |
| Представление с фиксированной точкой (Используют оператор точности, чтобы задать количество цифр после десятичной точки.) |
| Экспоненциальное представление, такое как | |
| То же самое как | |
| Более компактный из | |
| Более компактный из | |
Символы или строки |
| Отдельный символ |
| Вектор символов или массив строк. Тип синтезируемого текста совпадает с типом |
Дополнительные операторы
Дополнительный идентификатор, флаги, ширина поля, точность и операторы подтипа далее задают формат синтезируемого текста.
Идентификатор
Порядок для обработки входных аргументов функции. Используйте синтаксис
, где n
$n
представляет положения других входных параметров в вызове функции.
Пример: ('%3$s %2$s %1$s %2$s','A','B','C')
входные параметры печати 'A'
B
C
можно следующим образом: C B A B
.
Примечание: Если входной параметр является массивом, вы не можете использовать идентификаторы, чтобы задать конкретные элементы массива от того входного параметра.
Флаги
| Лево-выровнять по ширине. |
| Всегда распечатывайте символ знака (+ или –) для любого числового значения. |
| Вставьте пробел перед значением. |
'0' | Заполните к ширине поля нулями перед значением. |
| Измените выбранные числовые преобразования:
Пример: |
Ширина поля
Минимальное количество символов, чтобы распечатать. Оператор ширины поля может быть номером или звездочкой (*
) относиться к входному параметру.
Когда вы задаете *
как оператор ширины поля, другие входные параметры должны обеспечить и ширину и значение, которое будет распечатано. Ширины и значения могут быть парами аргументов или парами в числовом массиве. С *
как оператор ширины поля, можно распечатать различные значения с различными ширинами.
Пример: входные параметры ('%12d',intmax)
эквивалентны ('%*d',12,intmax)
.
Пример: входные параметры ('%*d',[2 10 5 100])
возвратите '10 100'
, с двумя местами, выделенными для 10
и пять пробелов для 100
. Как альтернатива, также можно задать ширину поля и значения в качестве нескольких аргументов, в качестве в ('%*d',2,10,5,100)
.
Функция заполняет к ширине поля пробелами перед значением, если в противном случае не задано флагами.
Точность
Для | Количество цифр справа от десятичной точки |
Для | Количество значительных цифр |
Оператор точности может быть номером или звездочкой (*
) относиться к аргументу.
Когда вы задаете *
как полевой оператор точности, другие входные параметры должны обеспечить и точность и значение, которое будет распечатано. Точность и значения могут быть парами аргументов или парами в числовом массиве. С *
как оператор точности, можно распечатать различные значения к различной точности.
Когда вы задаете *.*
как ширина поля и операторы точности, необходимо задать ширину поля, точность и значения как триплеты.
Пример: входные параметры ('%.4f',pi)
эквивалентны ('%.*f',4,pi)
.
Пример: входные параметры ('%6.4f',pi)
эквивалентны ('%.*f',6,4,pi)
.
Пример: входные параметры ('%*.*f',6,4,pi,9,6,exp(1))
возвратите '3.1416 2.718282'
, с 9
и 6
как ширина поля и точность для выхода exp(1)
.
Если вы задаете оператор точности для значений с плавающей точкой, который превышает точность входного типа числовых данных, результаты не могут совпадать с входными значениями к точности, которую вы задали. Результат зависит от вашего компьютерного оборудования и операционной системы.
Подтипы
Можно использовать оператор подтипа, чтобы распечатать значение с плавающей точкой как его восьмеричное, десятичное, или шестнадцатеричное значение. Оператор подтипа сразу предшествует символу преобразования. Эта таблица показывает преобразования, которые могут использовать подтипы.
Тип входного значения | Подтип и символ преобразования | Тип выходного значения |
---|---|---|
Число с плавающей запятой |
| С двойной точностью шестнадцатеричное, восьмеричное, или десятичное значение |
| Шестнадцатеричное, восьмеричное, или десятичное значение с одинарной точностью |
Текст прежде или после операторов форматирования
formatSpec
может также включать дополнительный текст перед знаком процента, %
, или после символа преобразования. Текст может быть:
Обычный текст, чтобы распечатать.
Специальные символы, которые вы не можете ввести как обычный текст. Эта таблица показывает, как представлять специальные символы в formatSpec
.
Специальный символ | Представление |
---|---|
Одна кавычка |
|
Символ процента |
|
Обратная косая черта |
|
Предупреждение |
|
Клавиша Backspace |
|
Перевод формата |
|
Новая строка |
|
Возврат каретки |
|
Горизонтальная вкладка |
|
Вертикальная вкладка |
|
Символ, числовое значение Unicode® которого может быть представлено шестнадцатеричным номером, |
Пример: |
Символ, числовое значение Unicode которого может быть представлено восьмеричным числом, |
Пример: |
Известное поведение преобразований с операторами форматирования
Числовые преобразования распечатывают только действительный компонент комплексных чисел.
Если вы задаете преобразование, которое не соответствует данным, таким как текстовое преобразование для числового значения, MATLAB® заменяет заданное преобразование и использует %e
.
Примеры преобразует
pi
к 3.141593e+00
.
Если вы применяете текстовое преобразование (любой %c
или %s
) к целочисленным значениям MATLAB преобразует значения, которые соответствуют кодам допустимого символа к символам.
Примеры преобразует
[65 66 67]
к ABC
.
Типы данных: char |
string
A1,...,An
— Числовой, символ или строковые массивыЧисловой, символ или строковые массивы.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
| string
literalText
— Введите текст, не форматируя операторыВведите текст, не форматируя операторы, заданные как вектор символов, или представьте скаляр в виде строки. sprintf
переводит любые последовательности символа ESC в literalText
.
Типы данных: char |
string
str
— Форматированный текстФорматированный текст, возвращенный как вектор символов или скаляр строки. Тип выхода совпадает с типом formatSpec
.
errmsg
— Сообщение об ошибкеСообщение об ошибке, возвращенное как вектор символов, когда операция неудачна. В противном случае, errmsg
isempty.
sprintf
функция похожа на fprintf
, но fprintf
печать к файлу или к Командному окну.
Спецификаторы формата для чтения функционируют sscanf
и fscanf
отличайтесь от форматов для функций записи sprintf
и fprintf
. Функции чтения не поддерживают поле точности. Поле width задает минимум для записи, но максимум для чтения.
[1] Керниган, B. W., и Д. М. Ричи, язык программирования C, второй выпуск, Prentice-Hall, Inc., 1988.
[2] Спецификация X3.159-1989 ANSI: “Язык программирования C”, ANSI, 1 430 Broadway, Нью-Йорк, NY 10018.
Указания и ограничения по применению:
formatSpec
параметр должен быть постоянным.
В formatSpec
, шестнадцатеричные числа должны быть в области значений [0 7F], и восьмеричные числа должны быть в области значений [0 177].
Если все входные массивы являются постоянными, генератор кода оценивает sprintf
вызовите в MATLAB во время компиляции. В этом случае, ограничения генерации кода для sprintf
не применяйтесь и поведение sprintf
в сгенерированном коде совпадает с поведением в MATLAB.
Если внешние вызовы не возможны, генератор кода производит код С для sprintf
. Внешние вызовы не возможны, когда внешние вызовы отключены или когда sprintf
называется в parfor
цикл.
Поведение sprintf
в сгенерированном коде совпадает с поведением компилятора C вместо поведения MATLAB в этих случаях:
Спецификатор формата имеет соответствующий спецификатор формата C, например, %e
или %E
.
sprintf
вызов в parfor
цикл.
Отключены внешние вызовы.
Эти опции и возможности не поддержаны:
n$
идентификатор положения для переупорядочения входных значений
Печать массивов
Используя подтипы, чтобы распечатать число с плавающей запятой как его восьмеричное, десятичное, или шестнадцатеричное значение
Когда вы вызываете sprintf
со спецификатором формата %s
, вы не можете поместить нулевой символ посреди вектора вводимого символа. Чтобы записать нулевой символ, используйте sprintf(fid, '%c', char(0))
.
Типы входного параметра должны совпадать со своими типами формата. Например, если n
двойное, генерация кода не позволяет следующий код:
str = sprintf('%d',n)
Для генерации кода, сначала бросает n
к типу целого числа со знаком, такому как int8
.
str = sprintf('%d',int8(n))
Когда вы вызываете sprintf
со спецификатором целочисленного формата тип целочисленного аргумента должен быть типом, который целевой компьютер может представлять как нативный тип C. Например, если вы вызываете sprintf('%d', int64(n))
, затем целевой компьютер должен иметь нативный тип C, который поддерживает 64-битное целое число.
Динамическое выделение памяти должно быть включено.
Указания и ограничения по применению:
Эта функция принимает массивы графического процессора, но не работает на графическом процессоре.
Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.