Desenvolvimento, Tutorial » Formatar moedas ou números decimais com a função number_format() do PHP
24 de outubro de 2008 por Leo Caseiro
A função number_format() do PHP, além de trocar ponto(.) por vírgula(,), também serve para definir quantas casas decimais teremos no valor.
O número que é em Inglês 999.9 fica 999,90 no formato moeda brasileiro.
Além disso, podemos definir se irá exibir algum caracter a cada grupo de milhar(de mil em mil)
string number_format ( float $number, int $decimals, string $dec_point, string $thousands_sep )
podemos definir por:
valor texto number_format($valor_decimal, $casas_decimais,$caracter_definicao_decimal, $caracter_definicao_milhar)
Por exemplo, se quisermos que o número 1000 fique como 1.000, utilizamos a função desta maneira:
$valor = 1000; echo number_format($valor,0,",",".");
Agora se quisermos que o valor 1,000.9(em formato inglês) tenha o formato 1.000,90(brasileiro), utilize:
$valor = 1,000.9; echo number_format($valor,2,",",".");
Se não quiser que tenha o ponto(.) entre as casas de milhar, deixe com o última parâmetro vazio:
$valor = 1000.9; echo number_format($valor,2,",","");
Existe uma maneira gambiarra para formatar número que eu não aconselho a utilizar. Seria algo do tipo:
$valor = 100.9
echo str_replace(".",",",$valor);
Gostou do Post? Assine o Feed 
Artigos Relacionados:
- Função que ordena arrays Randomicamente em JavaScript, como o shuffle() do PHP
- Problemas ao contar caracteres com strlen do PHP
- Manual do PHP na própria Máquina em Português do Brasil (PT-BR)
- Liberar acesso externo no PHP para AJAX (crossdomain)
- Como chamar um Javascript externo dentro de um js tipo include
$ValorTotal=101524
$ValorTotal=number_format($ValorTotal,2,'.',',');
Valor total R$ 1,015.24
[...] aconselho a utilizar. Seria algo do tipo: $valor = 100.9 echo str_replace(".",",",$valor); Fonte: leocaseiro.com.br Share this:TwitterFacebookLike this:LikeBe the first to like this [...]
[...] leocaseiro.com.br Categories: PHP, Programação Clique aqui para cancelar a resposta. [...]
Já tentei sim e não dá certo. Acabei pensado em outra função, a substr(). Assim eu divido a string em mais strings e depois junto tudo novamente colocando a vírgula. Usando valor negativo inverte-se o ponto de início (substr($v,-2)). A outra parte eu uso strlen() e subtraio duas posições de seu resultado. Isso só para a vírgula ficar no lugar certo. Quanto aos pontos… bem alguns ifs baseados no tamanho da string resolve.
Não é a maneira mais prática mas resolveu meu problema. Se eu achar algo melhor, é claro que posto aqui com prazer. Muito obrigado pela atenção. Abraço e boa sorte!
Be… enquanto não acho algo próprio para resolver esta questão, vou usar esta função que criei.
Tudo porque eu preciso deixar a digitação em texto para o cliente obedecer a escrita em português. Não quero usar javascript para fazer uma máscara, já que não é em todos os computador que vai funcionar. E o campo no banco de dados é inteiro (para manter os centavos, real estava dando erro), assim eu consigo inserir uma "string" em um campo numérico. Não é o mais bonito mas funciona e o cliente está satisfeito e eu prefiro usar só php. Segue o código da função:
<?php function em_real($campo){
// limpar valor texto 1.500.000,59 em inteiro e depois em real formatado
$vi = trim( $campo);
$vi = str_replace(".","",$vi); $vi = str_replace(",","",$vi);
$comp = strlen($vi);
$v0 = substr($vi,-2); // centavos
$vv = substr($vi,0, $comp-2); // milares
return $valor_real = number_format($vv,0,",",".").",". $v0; // formato final
}
?>
Alexandre, desculpe a demora, mas acho que divindo por 100 e usando o number_format você tem um resultado mais rápido e mais confiável do que trabalhar com strings!
Abs e desculpe a demora!
O problema dessa função é que ela é pensada na forma americana de escrita. Imagine algo como um valor Real fosse digitado assim: 125000048 , sem ponto e sem vírgula. Como resolver isso com esta função? impossível, pois retornaria 125.000.048,00 sendo que a intenção era 1.250.000,48. Alguém sabe como resolver isso?
Boa sorte com o blog e obrigado!
Já tentou deixar os parametros vazios?
ex: number_format($valor,0,"","");
dúvida na mesma questão! Estou usando wordpress e o sistema não reconhece o BRL.
Igor, especifique melhor sua dúvida por favor?
Veja se a resposta acima te ajuda!
Abs, e desculpe a demora!
ex.:
$valor = 150;
echo number_format($valor,2,",",".");
vai retornar 150,00
ex².:
$valor = 150.25;
echo number_format($valor,2,",",".");
vai retornar 150,25
Bem, o problema é quando se digita 15025 (sem o ponto ou vírgula). Esse era o meu problema, o cliente queria digitar direto, sem formatação alguma. Vai entender né!?!
Mas valeu a boa vontade Pedro. Isso que você menciona está no texto do próprio post e bem explicado e você só o repetiu. Mas isso não serve para o caso de números onde não se coloca ponto ou vírgula mas mesmo assim existe o centavos. Como eu mencionei lá em cima, o 15025 (cento e cinquenta reais e vinte e cinco centavos). Abraço.
Nesse caso, não é mais fácil você dividir por 100?
$number = 125000048;$moeda = number_format($number/100,2,",","."); //1.250.000,48
Olá Leo, não se preocupe quanto a possíveis demora. O que vale é a boa vontade e… imagine só, você está certo: dividir por 100, funcionou! Éra exatamente o que eu precisava e sem nenhuma linha à mais… Agora só tenho um probleminha… hehehe… vou ter de jogar minha função fora hahahaha!!!!
E pode acreditar que sempre estarei dando uma consultada no seu site.
Abração e boa sorte!
Magina! Sempre que posso tento ajudar todo mundo rsrs!
Então, na programação é assim. Existem milhares de caminhos para percorrer! O que importa é o resultado final!
A sua função funcionou, então ta valendo rsrs!
Tenho um colega de trabalho que diz sempre assim: \”Existe o jeito certo e o que funciona\”
Você até pode jogar sua função \”fora\”. Mas de qualquer maneira, este problema fez você pensar e pensar e pensar. E esse é o objetivo do programador. Resolver problemas!
Abs e espero postar mais em breve! Boa sorte pra ti também!
ai é um erro de digitação. Aprendemos na escola, se no numero que digitamos não tem ponto nem virgula, ele todo é um inteiro, se vc digita isso 125000048 vc quer isso 125.000.048,00 é a mesma coisa. se vc quer q saia isso 1.250.000,48 deve digitar isso 1250000.48 ou 1250000,48. vc é quem apresenta os decimais para qualquer programa, ate a calculadora.
da de botar o numero decimal em imgles