Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera estou usando o NumberFormatter do PHP para converter moedas. O problema ocorre quando tento converter um valor negativo, ele me exibe o seguinte resultado :
(R$4.444,44)
Eu preciso que ele exiba o seguinte:
-R$4.444,44 ou R$-4.444,44
Segue meu código:
$valores = '-4444.44';
$moeda2 = new NumberFormatter('pt_BR', NumberFormatter::CURRENCY);
$valores = $moeda2->formatCurrency($valores, 'BRL');ok com ele eu converto um numero para o padrão pt-br
Como eu faço o inverso? Ou seja converter o seguinte número 4.444,44 para 4444.44?
>
ok com ele eu converto um numero para o padrão pt-br
Como eu faço o inverso? Ou seja converter o seguinte número 4.444,44 para 4444.44?
Olá, boa tarde.
Para converter faça:
$a = "4.444,44"
$a = number_format($a, 2, ".","");
Isso fará ficar assim 4444.44
Pode usar o str_replace se tiver problemas em fazer essa coversão ->
$a = str_replace(",",".", $a); isso significa: onde tem uma virgula coloque um ponto na variável $a;
$a = str_replace(",","", $a); isso significa: onde tem uma virgula deixe em branco na variável $a;
Entendeu o funcionamento do str_replace?
@crebs86, o number_format não funciona se o número estiver com vírgula. Teste e veja que dá erro.
Para converter para pt-br, tem que usar str_replace para tirar todos os pontos (".") e outro str_replace pra transformar a vírgula em ponto.
Bom seguindo o manual do php:
http://php.net/manual/pt_BR/numberformatter.formatcurrency.php
Cheguei a solução. Que na minha opinião e muito melhor usar o NumberFormatter pois e uma biblioteca nativa do php.
Segue a solução para conversão.
$valores = '-99999999.99';
$moeda2 = new NumberFormatter('pt_BR', NumberFormatter::CURRENCY);
$moeda2->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-R$");
$moeda2->setTextAttribute(NumberFormatter::NEGATIVE_SUFFIX, "");
$valores = $moeda2->formatCurrency($valores, 'BRL');
Retorna -R$99.999.999,99
Solução para reversão
$moeda2 = new NumberFormatter('pt_BR', NumberFormatter::CURRENCY);
$valor_puro = $moeda1->parseCurrency($valores, $moeda_bd);
Retorna 99999999.99
>
@crebs86, o number_format não funciona se o número estiver com vírgula. Teste e veja que dá erro.
Para converter para pt-br, tem que usar str_replace para tirar todos os pontos (".") e outro str_replace pra transformar a vírgula em ponto.
Ops, desculpe.
Primeiro retire o ponto
$a = "4.444,44"
$a = str_replace(".","", $a); transforma ponto em vazio assim: 4444,44
agora
$a = str_replace(",",".", $a);transformar a virgula em ponto.
@Hugo Borges_120734
Na verdade, eu nem conhecia essa classe NumberFormatter. Sugeri a função number_format pois é bem mais simples, na minha opinião, e faz a mesma coisa.
Eu não sou muito fã de ficar usando classes para tudo. Mas é uma preferência pessoal :P
Que bom que chegou à solução da maneira como procurava ;)
É só usar number_format
// exibe R$ -4.444,44