W3docs

money_format()

Aprende sobre la función money_format() de PHP, usada para formatear números como cadenas de moneda. Función obsoleta desde PHP 7.4 y eliminada en PHP 8.

La función money_format() formatea un número como una cadena de moneda, aplicando un separador de miles, un punto decimal y un símbolo de moneda según la configuración regional activa.

Importante: money_format() está obsoleta desde PHP 7.4 y eliminada en PHP 8.0. Además, nunca existió en Windows. Si estás escribiendo código nuevo, ve directamente a la sección Reemplazo moderno que aparece más abajo — el resto de esta página documenta la función heredada para que puedas leer y mantener código PHP antiguo.

Syntax

string money_format ( string $format , float $number )

La función acepta dos parámetros:

  • $format – una cadena que describe cómo formatear el número. Contiene una o más especificaciones de conversión (cada una comenzando con %), de manera similar a sprintf(). Cualquier texto fuera de una especificación se imprime literalmente.
  • $number – el valor numérico a formatear.

Devuelve la cadena formateada.

Especificadores de formato habituales

EspecificadorSignificadoEjemplo de salida (en_US, 1234.56)
%nFormato de moneda nacional (local)$1,234.56
%iFormato de moneda internacionalUSD 1,234.56
%.2nFormato nacional con 2 decimales$1,234.56
%(nEncierra los importes negativos entre paréntesis($1,234.56)
%!nSuprime el símbolo de moneda1,234.56

La configuración regional (establecida con setlocale()) determina qué símbolo de moneda, carácter de agrupación y punto decimal se utilizan.

Ejemplo

<?php
$number = 1234.56;
setlocale(LC_MONETARY, 'en_US');
echo money_format('%n', $number);
?>

Aquí $number almacena un valor de punto flotante, y la llamada a setlocale() configura la configuración regional monetaria a en_US. La salida es:

$1,234.56

Aviso: setlocale() devuelve false si la configuración regional solicitada no está instalada en el servidor, y money_format() recurre silenciosamente a un valor predeterminado. Siempre verifica que el nombre de la configuración regional (por ejemplo, en_US frente a en_US.UTF-8) realmente exista en tu sistema.

Reemplazo moderno: NumberFormatter

Dado que money_format() desapareció en PHP 8, el enfoque recomendado es la clase NumberFormatter de la extensión intl. Es consciente de la configuración regional, funciona en todas las plataformas (incluido Windows) y utiliza datos ICU en lugar de la configuración regional del sistema:

<?php
$number = 1234.56;

$formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency($number, 'USD');
?>

Salida:

$1,234.56

Para formatear el mismo importe con una configuración regional y moneda diferentes, basta con cambiar la configuración regional del constructor y el código de moneda:

<?php
$number = 1234.56;

$de = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);
echo $de->formatCurrency($number, 'EUR');
?>

Salida (la agrupación alemana usa un punto para los miles y una coma para los decimales):

1.234,56 €

Cuándo usar cada opción

  • Código nuevo: usa NumberFormatter::formatCurrency() — es el único formateador de moneda disponible en PHP 8+.
  • Código heredado en PHP 7.4 o anterior: money_format() aún funciona pero emitirá un aviso de obsolescencia; planifica la migración.
  • Números simples sin moneda: si solo necesitas un separador de miles y decimales fijos (sin símbolo de moneda ni reglas de configuración regional), number_format() es más ligero.

Funciones relacionadas

  • number_format() – formatea un número con miles agrupados.
  • setlocale() – establece la configuración regional utilizada por money_format() y otras funciones sensibles a la configuración regional.
  • sprintf() / printf() – formateo de cadenas de propósito general.
  • round() – redondea un valor antes de formatearlo como moneda.

Práctica

Práctica
¿Qué hace la función 'money_format' en PHP?
¿Qué hace la función 'money_format' en PHP?
Was this page helpful?