Данные формата в строку
str = sprintf(formatSpec,A1,...,An)
[str,errmsg] = sprintf(formatSpec,A1,...,An)
str = sprintf(txt)
форматирует данные в массивах str = sprintf(formatSpec,A1,...,An)
A1,...,An
согласно formatSpec
в порядке следования столбцов и возвращает результаты в str
.
возвращает сообщение об ошибке как вектор символа, когда операция неудачна. В противном случае [str,errmsg] = sprintf(formatSpec,A1,...,An)
errmsg
пуст.
переводит последовательности символа ESC в str = sprintf(txt)
txt
, такие как \n
и \t
. Это возвращает все другие неизменные символы. Если txt
содержит оператор форматирования (такой как %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')
, распечатывает входные параметры,
'B'
, 'C'
можно следующим образом: C B B
.
Примечание: Если входной параметр является массивом, вы не можете использовать идентификаторы, чтобы задать конкретные элементы массива от того входного параметра.
Флаги
| Лево-выровнять по ширине. |
| Всегда распечатывайте символ знака (+ или –) для любого числового значения. |
| Вставьте пробел перед значением. |
| Заполните к ширине поля нулями перед значением. |
| Измените выбранные числовые преобразования:
Пример 5. |
Ширина поля
Минимальное количество символов, чтобы распечатать. Оператор ширины поля может быть номером или звездочкой (*
), чтобы относиться к входному параметру.
Пример: Входные параметры (' %12d', intmax)
эквивалентны (' % *d', 12, intmax)
.
Функция заполняет к ширине поля пробелами перед значением, если в противном случае не задано флагами.
Точность
Для | Количество цифр справа от десятичной точки |
Для | Количество значительных цифр |
Оператор точности может быть номером или звездочкой (*
), чтобы относиться к аргументу.
Пример: Входные параметры (' %6.4f', пи)
эквивалентны (' % *.*f', 6, 4, пи)
.
Если вы задаете оператор точности для значений с плавающей точкой, который превышает точность входного типа числовых данных, результаты не могут совпадать с входными значениями к точности, которую вы задали. Результат зависит от вашего компьютерного оборудования и операционной системы.
Подтипы
Можно использовать оператор подтипа, чтобы распечатать значение с плавающей точкой как его восьмеричное, десятичное, или шестнадцатеричное значение. Оператор подтипа сразу предшествует символу преобразования. Эта таблица показывает преобразования, которые могут использовать подтипы.
Тип входного значения | Подтип и символ преобразования | Тип выходного значения |
---|---|---|
Число с плавающей запятой |
| С двойной точностью шестнадцатеричное, восьмеричное, или десятичное значение |
| Шестнадцатеричное, восьмеричное, или десятичное значение с одинарной точностью |
Текст прежде или после операторов форматирования
formatSpec
может также включать дополнительный текст перед знаком процента, %
, или после символа преобразования. Текст может быть:
Обычный текст, чтобы распечатать.
Специальные символы, которые вы не можете ввести как обычный текст. Эта таблица показывает, как представлять специальные символы в formatSpec
.
Специальный символ | Представление |
---|---|
Единственная кавычка |
|
Символ процента |
|
Наклонная черта влево |
|
Предупреждение |
|
Клавиша Backspace |
|
Перевод формата |
|
Новая строка |
|
Возврат каретки |
|
Горизонтальная вкладка |
|
Вертикальная вкладка |
|
Символ, числовое значение Unicode® которого может быть представлено шестнадцатеричным номером, |
Пример: |
Символ, числовое значение Unicode которого может быть представлено восьмеричным числом, |
Пример: |
Известное поведение преобразований с операторами форматирования
Числовые преобразования распечатывают только действительный компонент комплексных чисел.
Если вы задаете преобразование, которое не соответствует данным, таким как текстовое преобразование для числового значения, MATLAB® заменяет заданное преобразование и использует %e
.
Пример: '%s'
преобразовывает пи
в 3.141593e+00
.
Если вы применяете текстовое преобразование (или %c
или %s
) к целочисленным значениям, MATLAB преобразовывает значения, которые соответствуют кодам допустимого символа к символам.
Пример: '%s'
преобразовывает [65 66 67]
к ABC
.
Типы данных: char | string
A1,...,An
— Числовой, символ или массивы строкЧисловой, символ или массивы строк.
Типы данных: единственный
| удваиваются
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| логический
| char
| строка
txt
Введите текст, не форматируя операторыВведите текст, не форматируя операторы, заданные как вектор символа, или представьте скаляр в виде строки. sprintf
переводит любые последовательности символа ESC в txt
.
Типы данных: char | string
str
Форматированный текстФорматированный текст, возвращенный как вектор символа или скаляр строки. Тип вывода совпадает с типом formatSpec
.
errMsg
Сообщение об ошибкеСообщение об ошибке, возвращенное как вектор символа, когда операция неудачна. В противном случае errmsg
пуст.
Функция sprintf
подобна fprintf
, но печати fprintf
к файлу или к Командному окну.
Спецификаторы формата для функций чтения sscanf
и fscanf
отличаются от форматов для функций записи sprintf
и fprintf
. Функции чтения не поддерживают поле точности. Поле width задает минимум для записи, но максимум для чтения.
[1] Керниган, B. W., и Д. M. Ричи, язык программирования C, второй выпуск, Prentice-Hall, Inc., 1988.
[2] Спецификация X3.159-1989 ANSI: “Язык программирования C”, ANSI, 1 430 Broadway, Нью-Йорк, Нью-Йорк 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-битное целое число.
Указания и ограничения по применению:
Эта функция принимает массивы GPU, но не работает на GPU.
Для получения дополнительной информации смотрите функции MATLAB Выполнения на GPU (Parallel Computing Toolbox).
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.