Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Formatear texto

Para convertir datos a texto y controlar su formato, puede usar con funciones de conversión comunes, como y.formatting operatorsnum2strsprintf Estos operadores controlan la notación, la alineación, los dígitos significativos, y así sucesivamente. Son similares a los utilizados por la función en el lenguaje de programación C.printf Los usos típicos del texto con formato incluyen texto para los archivos de visualización y salida.

Por ejemplo, convierte los valores de punto flotante en texto mediante la notación de punto fijo.%f Ajuste el formato agregando información al operador, como para representar dos dígitos después de la marca decimal, o para representar 12 caracteres en la salida, relleno con espacios según sea necesario.%.2f%12f

A = pi*ones(1,3); txt = sprintf('%f | %.2f | %12f', A)
txt =  '3.141593 | 3.14 |     3.141593' 

Puede combinar operadores con texto ordinario y caracteres especiales en un.format specifier Por ejemplo, inserta un carácter de nueva línea.\n

txt = sprintf('Displaying pi: \n %f \n %.2f \n %12f', A)
txt =      'Displaying pi:        3.141593        3.14            3.141593'  

Las funciones que admiten los operadores de formato son,,, y las funciones de control de errores, y.composenum2strsprintffprintfasserterrorwarningMException

Los campos del operador de formato

Un operador de formato puede tener seis campos, como se muestra en la figura. De derecha a izquierda, los campos son el carácter de conversión, subtipo, precisión, ancho de campo, indicadores e identificador numérico. (No se permiten caracteres espaciales en el operador. Se muestran aquí sólo para mejorar la legibilidad de la figura.) El carácter de conversión es el único campo obligatorio, junto con el carácter principal.%

Carácter de conversión

La conversión carácter especifica la notación de la salida. Consta de un único carácter y aparece en último en el especificador de formato.

Especificador

Descripción

c

Carácter individual.

d

Notación decimal (firmada).

e

Notación exponencial (usando una minúscula, como en).e3.1415e+00

E

Notación exponencial (usando una mayúscula, como en).E3.1415E+00

f

Notación de punto fijo.

g

El más compacto de o.%e%f (Ceros insignificantes no se imprimen.)

G

Igual que, pero usando una mayúscula.%gE

o

Notación octal (sin firmar).

s

Vector de caracteres o matriz de cadenas.

u

Notación decimal (sin signo).

x

Notación hexadecimal (sin signo, usando letras minúsculas –).af

X

Notación hexadecimal (sin signo, usando letras mayúsculas –).AF

Por ejemplo, formatee el número 46 con diferentes caracteres de conversión para mostrar el número en formatos decimal, de punto fijo, exponencial y hexadecimal.

A = 46*ones(1,4); txt = sprintf('%d   %f   %e   %X', A)
txt =  '46   46.000000   4.600000e+01   2E' 

Subtipo

El campo de subtipo es un carácter alfabético único que precede inmediatamente al carácter de conversión. Sin el campo de subtipo, los caracteres de conversión y tratar los datos de entrada como enteros.%o%x%X%u Para tratar los datos de entrada como valores de punto flotante en su lugar y convertirlos en representaciones octales, decimales o hexadecimales, utilice uno de los siguientes especificadores de subtipo.

b

Los datos de entrada son valores de punto flotante de precisión doble en lugar de enteros sin signo. Por ejemplo, para imprimir un valor de precisión doble en hexadecimal, use un formato como.%bx

t

Los datos de entrada son valores de punto flotante de precisión simple en lugar de enteros sin signo.

Precisión

El campo de precisión de un operador de formato es un entero no negativo que sigue inmediatamente a un punto. Por ejemplo, en el operador, la precisión es.%7.3f3 Para el operador, la precisión indica el número de dígitos significativos que se mostrarán.%g Para el,, y los operadores, la precisión indica cuántos dígitos se mostrarán a la derecha del punto decimal.%f%e%E

Mostrar números a diferentes precisiones utilizando el campo de precisión.

txt = sprintf('%g   %.2g   %f   %.2f', pi*50*ones(1,4))
txt =  '157.08   1.6e+02   157.079633   157.08' 

Aunque puede especificar la precisión en un operador de formato para el texto de entrada (por ejemplo, en el operador), normalmente no hay ninguna razón para hacerlo.%s Si especifica la precisión como, y es menor que el número de caracteres en el texto de entrada, a continuación, la salida contiene sólo los primeros caracteres.ppp

Ancho de campo

El ancho de campo en un operador de formato es un entero no negativo que especifica el número de dígitos o caracteres en la salida al formatear los valores de entrada. Por ejemplo, en el operador, el ancho del campo es.%7.3f7

Especifique diferentes anchos de campo. Para mostrar el ancho de cada salida, utilice el carácter.| De forma predeterminada, el texto de salida se rellena con caracteres de espacio cuando el ancho del campo es mayor que el número de caracteres.

txt = sprintf('|%e|%15e|%f|%15f|', pi*50*ones(1,4))
txt =  '|1.570796e+02|   1.570796e+02|157.079633|     157.079633|' 

Cuando se utiliza en la entrada de texto, el ancho del campo puede determinar si se desea rellenar el texto de salida con espacios. Si el ancho del campo es menor o igual que el número de caracteres en el texto de entrada, entonces no tiene ningún efecto.

txt = sprintf('%30s', 'Pad left with spaces')
txt =  '          Pad left with spaces' 

Banderas

Los indicadores opcionales controlan el formato adicional del texto de salida. La tabla describe los caracteres que puede utilizar como banderas.

Carácter

Descripción

Ejemplo

Signo menos ()-

Justificar a la izquierda el argumento convertido en su campo.

%-5.2d

Signo más ()+

Para valores numéricos, imprima siempre un carácter de signo inicial (o). Para los valores de texto, justifique a la derecha el argumento convertido en su campo.+-

%+5.2d
%+5s

Espacio

Inserte un espacio antes del valor.

% 5.2f

Cero ()0

Pad con ceros en lugar de espacios.

%05.2f

Signo de almohadilla ()#

Modificar las conversiones numéricas seleccionadas:

  • Para, o, imprimir, o prefijo.%o%x%X00x0X

  • Para, o, imprima el punto decimal incluso cuando la precisión es 0.%f%e%E

  • Para o, no quite los ceros a la izquierda o el punto decimal.%g%G

%#5.0f

Justificar a la derecha y a la izquierda la salida. El comportamiento predeterminado es justificar a la derecha el texto de salida.

txt = sprintf('right-justify: %12.2f\nleft-justify: %-12.2f',...               12.3, 12.3)
txt =      'right-justify:        12.30      left-justify: 12.30       '  

Mostrar un signo para los números positivos.+ El comportamiento predeterminado es omitir el signo principal para los números positivos.+

txt = sprintf('no sign: %12.2f\nsign: %+12.2f',...               12.3, 12.3)
txt =      'no sign:        12.30      sign:       +12.30'  

Pad a la izquierda con espacios y ceros. El comportamiento predeterminado es el pad con espacios.

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'  

Nota

Puede especificar más de un indicador en un operador de formato.

Identificadores de valor

De forma predeterminada, las funciones como insertar valores de argumentos de entrada en el texto de salida en orden secuencial.sprintf Para procesar los argumentos de entrada en un orden no secuencial, especifique el orden mediante identificadores numéricos en el especificador de formato. Especifique argumentos no secuenciales con un entero inmediatamente después del signo, seguido de un signo.%$

Ordenados secuencialmenteOrdenado por identificador
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' 

Caracteres especiales

Los caracteres especiales pueden formar parte del texto de salida. Pero debido a que no se pueden introducir como texto ordinario, requieren secuencias de caracteres específicas para representarlos. Para insertar caracteres especiales en el texto de salida, utilice cualquiera de las secuencias de caracteres de la tabla.

Carácter especial

Representación en el especificador de formato

Comilla simple

''

El carácter porcentual

%%

Barra invertida

\\

Alarma

\a

Retroceso

\b

El feed de forma

\f

Nueva línea

\n

Retorno de carro

\r

Pestaña horizontal

\t

Pestaña vertical

\v

Carácter cuyo valor numérico se puede representar por el número hexadecimal,Unicode®N

\xN

DevuelveExample:sprintf('\x5A')'Z'

Carácter cuyo valor numérico puede representarse mediante el número octal,UnicodeN

\N

DevuelveExample:sprintf('\132')'Z'

Configuración de ancho de campo y precisión

El operador de formato sigue un conjunto de reglas para formatear el texto de salida en el ancho de campo especificado y la precisión. También puede especificar valores para el ancho de campo y la precisión fuera del especificador de formato y usar identificadores numerados con el ancho y la precisión del campo.

Reglas para formatear precisión y ancho de campo

La figura ilustra cómo el ancho de campo y la configuración de precisión afectan a la salida de las funciones de formato. En esta figura, el cero que sigue al signo en el operador de formato significa agregar ceros iniciales al texto de salida en lugar de caracteres de espacio.%

  • Si no se especifica la precisión, el valor predeterminado es seis.

  • Si la precisión es menor que el número de dígitos de la parte fraccionaria de la entrada, solo se mostrarán los dígitos después del punto decimal.pp El valor fraccionario se redondea en la salida.

  • Si la precisión es mayor que el número de dígitos de la parte fraccionaria de la entrada, los dígitos se mostrarán después del punto decimal.pfp La parte fraccionaria se amplía a la derecha con ceros en la salida.p-f

  • Si no se especifica el ancho de campo, a continuación, de forma predeterminada, donde es el número de dígitos en toda la parte del valor de entrada.p+1+nn

  • Si el ancho del campo es mayor que, entonces toda la parte del valor de salida se rellena a la izquierda con caracteres adicionales.wp+1+nw-(p+1+n) Los caracteres adicionales son caracteres de espacio a menos que el operador de formato incluya la marca.0 En ese caso, los caracteres adicionales son ceros.

Especifique el ancho de campo y el especificador de formato exterior de precisión

Puede especificar el ancho y la precisión del campo utilizando valores de una lista de argumentos secuencial. Utilice un asterisco () en lugar del ancho de campo o los campos de precisión del operador de formato.*

Por ejemplo, formatee y muestre tres números. En cada caso, utilice un asterisco para especificar que el ancho o la precisión del campo proceden de argumentos de entrada que siguen el especificador de formato.

txt = sprintf('%*f   %.*f   %*.*f',...               15,123.45678,...                    3,16.42837,...                      6,4,pi)
txt =  '     123.456780   16.428   3.1416' 

En la tabla se describen los efectos de cada operador de formato en el ejemplo.

Operador de formato

Descripción

%*f

Especifique width como el siguiente argumento de entrada,.15

%.*f

Especifique la precisión como el siguiente argumento de entrada,.3

%*.*f

Especifique el ancho y la precisión como los siguientes argumentos de entrada y.64

Puede mezclar los dos estilos. Por ejemplo, obtenga el ancho de campo del siguiente argumento de entrada y la precisión del especificador de formato.

txt = sprintf('%*.2f', 5, 123.45678)
txt =  '123.46' 

Especificar identificadores numerados en campos de ancho y precisión

También puede especificar el ancho de campo y la precisión como valores de una lista de argumentos no secuenciales, utilizando una sintaxis alternativa que se muestra en la figura. En el operador de formato, especifique el ancho y la precisión del campo con asteriscos que sigan los identificadores y signos numerados.$ Especifique los valores del ancho de campo y la precisión con los argumentos de entrada que siguen el especificador de formato.

Por ejemplo, formatee y muestre tres números. En cada caso, utilice un identificador numerado para especificar que el ancho o la precisión del campo proceden de argumentos de entrada que siguen el especificador de formato.

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' 

En la tabla se describe el efecto de cada operador de formato en el ejemplo.

Operador de formato

Descripción

%1$*4$f

especifica el primer argumento de entrada, como el valor1$123.45678

especifica el cuarto argumento de entrada, como el ancho del campo*4$15

%2$.*5$f

especifica el segundo argumento de entrada, como el valor2$16.42837

especifica el quinto argumento de entrada, ya que la precisión.*5$3

%3$*6$.*7$f

especifica el tercer argumento de entrada, como el valor3$pi

especifica el sexto argumento de entrada, como el ancho del campo*6$6

especifica el séptimo argumento de entrada, ya que la precisión.*7$4

Restricciones sobre el uso de identificadores

Si alguno de los operadores de formato incluye un campo de identificador, todos los operadores del especificador de formato deben incluir campos de identificador. Si utiliza el orden secuencial y no secuencial en la misma llamada de función, la salida se trunca en el primer conmutador entre identificadores secuenciales y no secuenciales.

Sintaxis válidaSintaxis no válida
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 ' 

Si la llamada de función proporciona más argumentos de entrada que los operadores de formato en el especificador de formato, se reutilizan los operadores. Sin embargo, solo las llamadas de función que usan pedidos secuenciales reutilizar operadores de formato. No se pueden reutilizar los operadores de formato cuando se utilizan identificadores numerados.

Sintaxis válidaSintaxis no válida
sprintf('%d',1,2,3,4)  ans =      '1234' 
sprintf('%1$d',1,2,3,4)  ans =      '1' 

Si utiliza identificadores numerados cuando los datos de entrada son un vector o una matriz, la salida no contiene datos con formato.

Sintaxis válidaSintaxis no válida
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 

Consulte también

| | |

Temas relacionados