jairogarcíarincón
![Formato de Strings](https://admin.jairogarciarincon.com/img/clases/1015.jpg)
03/09/2022
Contenidos
Introducción
Existen diferentes funciones para dar formato la salida por pantalla de una variable PHP, tanto para números o valores de tipo moneda, comop para fechas o cualquier otro tipo de string.
Muchas de estas funciones dependen de la configuración de localización de nuestro servidor PHP, en concreto, del valor establecido con la función setlocale(), que tiene dos parámetros, uno para el nombre del locale que quiero modificar, y otro para el valor que le quiero dar, por ejemplo:
setlocale(LC_MONETARY, 'es_ES');
cambiará el formato de moneda al tipo español. De este modo, la función setlocale() nos permite modificar los siguientes parámetros:
- LC_ALL para establecer todas las siguientes
- LC_COLLATE para la comparación de strings
- LC_CTYPE para la clasificación y conversión de caracteres
- LC_MONETARY para datos de moneda
- LC_NUMERIC para el separador decimal
- LC_TIME para el formato de fecha y hora
- LC_MESSAGES para las respuestas del sistema
No obstante, algunas de ellas solo funcionarán si el paquete intl de PHP está instalado y el idioma locale correspondiente también.
Por defecto en PHP, este paquete no se encuentra instalado, de modo que realizaremos todas las funciones de formato sin atender a la localización, y más adelante, cuando instalemos nuestro propio servidor web volveremos sobre esta parte.
Formato de números
Por excelencia, la función que nos permite dar formato a un número es number_format(), que además no tiene en cuenta la configuración de localización comentada anteriormente.
Esta función admite 1, 2 o 4 parámetros (pero no 3):
- 1 parámetro: el número se redondea al integer más próximo y se usa una coma (,) para separar millares
- 2 parámetros: el número se redondea al float más próximo con los decimales indicados, usando la coma (,) para separar millares y el punto (.) para los decimales
- 4 parámetros: el número se redondea al float más próximo con los decimales indicados, usando la el tercer parámetro para separar decimales y el cuarto parámetro para los millares
El siguiente código muestra ejemplos de todos ellos:
Formato genérico
La forma más genérica de imprimir por pantalla un string formateado es mediante el uso de la función printf() (o sprintf() para retornar el valor en vez de escribirlo).
En ambos casos, el string de formato está compuesto de cero o más directivas: caracteres ordinarios (excluyendo %) que son copiados directamente al resultado, y especificaciones de conversión, donde cada una de las cuales da lugar a extraer su propio parámetro.
Cada especificación de conversión consiste en un signo de porcentaje (%), seguido por uno o más de estos elementos, en orden:
- Un especificador de signo opcional que fuerza a usar un signo (- o +) en un número. Por defecto, sólo el signo - se utiliza en un número si es negativo. Esta especificación fuerza números positivos para que también tengan adjunto el signo +.
- Un especificador de relleno opcional que indica qué carácter se utiliza para rellenar el resultado hasta el tamaño justo del string. Este puede ser un carácter de espacio o un 0 (el carácter cero). El valor por defecto es rellenar con espacios. Un carácter de relleno alternativo se puede especificar prefijándolo con una comilla simple ('). Ver los ejemplos más adelante.
- Un especificador de alineación opcional que indica si el resultado debe ser alineado a la izquierda o a la derecha. El valor por defecto es justificado a la derecha, un carácter - lo justificará a la izquierda.
- Un número opcional, un especificador de ancho que indica de cuántos caracteres (mínimo) resultará esta conversión.
- Un especificador de precisión opcional en la forma de un punto (.) seguido de un string opcional de dígitos decimales que indica cuántos dígitos decimales deben mostrarse para los números de punto flotante. Cuando se utiliza este especificador con un string, actúa como un punto de corte, estableciendo un límite máximo de caracteres al string. Además, el carácter para empleado cuando se rellena un número podría especificarse opcionalmente entre el punto y el dígito.
- Un especificador de tipo que indica con qué tipo deben ser tratados los datos del argumento. Los tipos posibles son:
- % - un carácter de porcentaje literal. No se requiere argumento.
- b - el argumento es tratado como un valor de tipo integer y presentado como un número binario.
- c - el argumento es tratado como un valor de tipo integer y presentado como el carácter con ese valor ASCII.
- d - el argumento es tratado como un valor de tipo integer y presentado como un número decimal (con signo).
- e - el argumento es tratado con notación científica (e.g. 1.2e+2). El especificador de precisión indica el número de dígitos después del punto decimal.
- E - como %e pero utiliza la letra mayúscula (e.g. 1.2E+2).
- f - el argumento es tratado como un valor de tipo float y presentado como un número de punto flotante (considerando la configuración regional).
- F - el argumento es tratado como un valor de tipo float y presentado como un número de punto flotante (no considerando la configuración regional).
- g - lo mismo que %e y %f.
- G - lo mismo que %E y %f.
- o - el argumento es tratado como un valor de tipo integer y presentado como un número octal.
- s - el argumento es tratado y presentado como un string.
- u - el argumento es tratado como un valor de tipo integer y presentado como un número decimal sin signo.
- x - el argumento es tratado como un valor de tipo integer y presentado como un número hexadecimal (con las letras en minúsculas).
- X - el argumento es tratado como un valor de tipo integer y presentado como un número hexadecimal (con las letras en mayúsculas).
Vamos a analizar algunos de estos especificadores mediante ejemplos con sprintf():
A continuación, ejemplos con printf():
El resultado del ejemplo sería:
%b = '10100111101010011010101101'
%c = 'A'
%d = '43951789'
%e = '4.39518e+7'
%f = '43951789.000000'
%o = '247523255'
%s = '43951789'
%x = '29ea6ad'
%X = '29EA6AD'
%+d = '+43951789'
%+d = '-43951789'
Ejemplos de especificadores de string con printf():
El resultado del ejemplo sería:
[mono]
[000000mono]
[######mono]
[muchos mon]
Y para finalizar, 3 ejemplos más con sprintf():
Ejercicios propuestos
1. Desarrolla una calculadora básica consistente en 2 campos de entrada de números, un selector tipo radio de operaciones (+, -, * y /) y un selector tipo select (moneda, decimal o científica) que al elegir uno de ellos calcule el resultado y lo formatee según la elección.
Publicado el 05 de Febrero de 2025
phpvariablesbuclesarrays