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