Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hugo Borges_120734

problema com NumberFormatter

Recommended Posts

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');

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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 ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.