PHP
Como formatar números com PHP
No post passado, mencionei como formatar datas em PHP orientado a objetos. Pois, com números, há também as maneiras procedurais e orientadas a objetos, e esta é outra questão que às vezes tiram a paciência de muitos desenvolvedores.
Qual é a ideia?
Usar o NumberFormatter para formatar números. Ele surgiu na versão PHP 5.3 e ainda tem muitos desenvolvedores experientes que não o conhecem. Para usa-lo é necessário também ativar no seu php.ini, a extensão intl. Se você está usando hospedagem compartilhadas, ou algo do tipo, contacte seu provedor de hospedagem sobre a disponibilidade do intl, se o provedor não tiver e/ou não puder instalar, cuidado! Encontre outro provedor que a ofereça, porque o intl é hoje uma extensão básica para normalização e padronização de dados entre vários idiomas, um provedor que se prese tem que o oferecer, senão, estará oferecendo um suporte defasado.
O que faremos?
- Brincar com o NumberFormatter
- Considerações finais.
Passos
- Brincar com o NumberFormatter.
Para mostrar um número no formato brasileiro:
$numberFormatter = new \NumberFormatter('pt-BR',\NumberFormatter::CURRENCY); echo $numberFormatter->format(1234.12); // isto criará um numberformatter e mostrará o número no formato brasileiro com um R$ na frente.
Basicamente o NumberFormatter precisa da localidade que queremos trabalhar (pt-BR, de_DE, en_US) e o tipo de formato do número (decimal, moeda, científico, percentual).
Para mostrar um número no formato brasileiro de percentual (usando método stático para criar o NumberFormatter):
echo \NumberFormatter::create('pt_BR',\NumberFormatter::PERCENT)->format(0.1); //lembrando que o tipo PERCENT multiplicará o número por 100 para normalizar para 100%. Então mostrará 10%.
Com NumberFormatter você pode determinar o número de casas decimais a ser formatado:
$numberFormatter->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, 2); //com o setAttribute você pode mudar inúmeras propriedades que alterará o número a ser mostrado
Outra funcionalidade legal é a possibilidade de criar um formato via expressão regular:
$numberFormat->setPattern("#0.# m"); //pedi para que não seja mostrado a casa de milhar e como sufixo a letra m
Agora você pega e se pergunta, mas como eu faço para transformar um número localizado, ou seja, no formato de um país para número habitual do PHP. É simples! É só usar o método parse:
echo $numberFormatter->parse("1.234,12"); //como o número é brasileiro, o numberformatter tem que ser iniciado com um 'pt-BR' e configurado devidamente
O método consegue reverter o número localizado no devido formato com qualquer sufixo, etc, mas, é preciso criar o NumberFormatter com os atributos necessários para que ele reconheça o número localizado, senão, ele não conseguirá transformar e retornará false.
- Considerações finais
É isso aí pessoal, como brincaram com o DateTime, espero que brinquem também com o NumberFormatter. Vejam que se trabalhar com códigos orientados a objetos e estruturados, melhora e muito a qualidade do nosso código e também a qualidade das nossas aplicações. Parem de ficar fazendo gambiarras para transformar números, de ficar tentando “reinventar a roda”, ela já está pronta, testada e aprovada, basta usa-la devidamente.
Referências: