Como converter bigDecimal para R$?

13 respostas
vitorkgb

Galera estou colhendo de um banco de dados valores em BigDecimal através do rs.getBigDecimal(), como eu formato ele para a nossa moeda R$ em string para exibir na tela???

13 Respostas

R

Use um DecimalFormat:

DecimalFormat decFormat = new DecimalFormat("'R$ ' 0.##");
System.out.println("Número formatado = " + decFormat.format(valorBigDecimal));
E

Use java.text.NumberFormat, tal como você faria com double.

Exemplo:

BigDecimal bd = new BigDecimal ("12.34");
NumberFormat nf = NumberFormat.getCurrencyInstance();
String s = nf.format (bd); // deve mostrar "R$ 12,34"
vitorkgb

Esses métodos que vocês me deram, eles só separam os centavos, se eu tiver R$ 1.000.000,00 vai aparecer 1000000,00

alguém teria um método que colocasse os pontos também?

Felagund
new java.text.DecimalFormat("#,###,##0.00");
vitorkgb

Obrigado Felagund… isso resolveu

e obrigado a todos aos outros também pela atenção!

glaucogoca

Se estivesse usando o Next poderia usar a classe Money. :wink:

eliangela

nossa!! Eu fico imaginando a quantidade de dinheiro que é necessário para se usar um big decimal, rsrsrrss

mario.fts

Qualquer conta com dinheiro em java precisa usar BigDecimal, double e float tem problemas de precisão que fazer o seu dinherio “sumir” após algumas contas.

Classes que usam o pattern Money geralmente encapsulam um long, controlando internamente as casas decimais. também da pra usar um BigDecimal internamente, mas é um pouco mais complexo.

EDIT: falei besteira sobre o Money, só corrigindo.

M

Felagund:
new java.text.DecimalFormat("#,###,##0.00");

Assim formata corretamente mas não aparece o símbolo monetário. Pode-se fazer:

new java.text.DecimalFormat("¤ #,###,##0.00");
E

Obviamente é difícil digitar esse símbolo - ele não está no teclado; se quiser, use (\u00A4) em vez de (¤).

M

Realmente. Um copy-paste também se aplica.

sergiotaborda

Qualquer conta com dinheiro em java precisa usar BigDecimal, double e float tem problemas de precisão que fazer o seu dinherio “sumir” após algumas contas.

Classes que usam o pattern Money geralmente encapsulam um BigDecimal tbm.

Não, não encapsulam, essa é a graça do Money, ele não precisa usar BigDecimal. Claro que vc pode fazer desse jeito, mas ai irá continuar a ter problemas nos calculos. Money altera as operações aritméticas possiveis. Por exemplo, não é possivel multiplicar dois moneys, mas multiplicar dois bigDecimal é possivel. O Money tem uma semântica mais rica. Internamente isso permite que ele use apenas um long.

mario.fts

Qualquer conta com dinheiro em java precisa usar BigDecimal, double e float tem problemas de precisão que fazer o seu dinherio “sumir” após algumas contas.

Classes que usam o pattern Money geralmente encapsulam um BigDecimal tbm.

Não, não encapsulam, essa é a graça do Money, ele não precisa usar BigDecimal. Claro que vc pode fazer desse jeito, mas ai irá continuar a ter problemas nos calculos. Money altera as operações aritméticas possiveis. Por exemplo, não é possivel multiplicar dois moneys, mas multiplicar dois bigDecimal é possivel. O Money tem uma semântica mais rica. Internamente isso permite que ele use apenas um long.

Realmente, olhando agora o seu exemplo e o do Fowler, não é usado um BigDecimal, só um long e controla as casas decimais internamente. Achei até mais fácil q a implementação q eu costumava utilizar, com BigDecimal.

Ponto pra vc. :wink:

Criado 3 de março de 2010
Ultima resposta 3 de mar. de 2010
Respostas 13
Participantes 9