W3docs

money_format()

Artigo sobre a função PHP money_format(), usada para formatar um número como uma string de moeda. Útil para trabalhar com valores monetários em PHP.

A função money_format() formata um número como uma string de moeda, aplicando um separador de milhares, um ponto decimal e um símbolo de moeda de acordo com a localidade ativa.

Importante: money_format() está obsoleta desde o PHP 7.4 e foi removida no PHP 8.0. Ela também nunca existiu no Windows. Se você estiver escrevendo código novo, vá direto para a seção Substituto moderno abaixo — o restante desta página documenta a função legada para que você possa ler e manter código PHP antigo.

Sintaxe

string money_format ( string $format , float $number )

A função recebe dois parâmetros:

  • $format – uma string que descreve como formatar o número. Ela contém uma ou mais especificações de conversão (cada uma começando com %), de forma semelhante ao sprintf(). Qualquer texto fora de uma especificação é impresso literalmente.
  • $number – o valor numérico a ser formatado.

Ela retorna a string formatada.

Especificadores de formato comuns

EspecificadorSignificadoExemplo de saída (en_US, 1234.56)
%nFormato de moeda nacional (local)$1,234.56
%iFormato de moeda internacionalUSD 1,234.56
%.2nFormato nacional, 2 casas decimais$1,234.56
%(nEnvolve valores negativos entre parênteses($1,234.56)
%!nSuprime o símbolo de moeda1,234.56

A localidade (definida com setlocale()) determina qual símbolo de moeda, caractere de agrupamento e ponto decimal são usados.

Exemplo

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

Aqui $number contém um valor de ponto flutuante, e a chamada setlocale() configura a localidade monetária para en_US. A saída é:

$1,234.56

Atenção: setlocale() retorna false se a localidade solicitada não estiver instalada no servidor, e money_format() então silenciosamente volta a um padrão. Sempre verifique se o nome da localidade (por exemplo, en_US vs. en_US.UTF-8) realmente existe no seu sistema.

Substituto moderno: NumberFormatter

Como money_format() foi removida no PHP 8, a abordagem recomendada é a classe NumberFormatter da extensão intl. Ela reconhece localidades, funciona em todas as plataformas (incluindo Windows) e usa dados ICU em vez da localidade do sistema:

<?php
$number = 1234.56;

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

Saída:

$1,234.56

Para formatar o mesmo valor para uma localidade e moeda diferentes, basta alterar a localidade do construtor e o código de moeda:

<?php
$number = 1234.56;

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

Saída (o agrupamento alemão usa ponto para milhares e vírgula para decimais):

1.234,56 €

Quando usar cada um

  • Código novo: use NumberFormatter::formatCurrency() — é o único formatador de moeda disponível no PHP 8+.
  • Código legado no PHP 7.4 ou anterior: money_format() ainda funciona, mas emitirá um aviso de obsolescência; planeje migrar.
  • Números simples sem moeda: se você precisar apenas de um separador de milhares e casas decimais fixas (sem símbolo de moeda ou regras de localidade), number_format() é mais leve.

Funções relacionadas

  • number_format() – formata um número com agrupamento de milhares.
  • setlocale() – define a localidade usada por money_format() e outras funções sensíveis à localidade.
  • sprintf() / printf() – formatação de strings de uso geral.
  • round() – arredonda um valor antes de formatá-lo como moeda.

Prática

Prática
O que a função 'money_format' em PHP faz?
O que a função 'money_format' em PHP faz?
Was this page helpful?