Como converter bigDecimal para R$?

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???

Use um DecimalFormat:

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

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"

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?

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

Obrigado Felagund… isso resolveu

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

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

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

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.

[quote=Felagund] new java.text.DecimalFormat("#,###,##0.00"); [/quote]
Assim formata corretamente mas não aparece o símbolo monetário. Pode-se fazer:

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

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

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

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.[/quote]

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.

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.[/quote]

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.[/quote]

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: