[Problema] Formatar moeda

5,085 views
Skip to first unread message

Vitor

unread,
Aug 11, 2011, 10:36:58 AM8/11/11
to JasperReports / iReport Brasil
Olá, gostaria da ajuda de vocês.
Tenho um relatório que mostra um valor. Esse valor precisa estar
formatado para o Real(ex:R$1.234,56).
A sua formatação atual está assim : "R$ #,##0.00 ". Ele fica assim :R$
395.40.
Quando eu coloco ;"R$ #,##0,0 "ele fica assim :R$ 3,95. Quando
formatado " R$#.##0,00 " dá erro:ERROR [ReportGenerator]
java.lang.IllegalArgumentException: Malformed pattern "R$ #.##0,00"

O valor está em BigDecimal, como eu poderia resolver isso pelo
iReport?
Obrigado.

Vinicios Binsfeld

unread,
Aug 11, 2011, 12:24:44 PM8/11/11
to jasperreports-...@googlegroups.com
Você já tentou utilizar o tipo currency no pattern da formatação?

Élysson Mendes Rezende

unread,
Aug 11, 2011, 12:31:00 PM8/11/11
to jasperreports-...@googlegroups.com
Kalé? Tranquilo?

Nas propriedades do textfield tem um pattern, vai só precisa escolher a quantidade de casas decimais do valor, na TextFieldExpression você coloca a váriavel do valor e na Expression class coloca como BigDecimal (ou float depende do que você esta utilizando).

Espero ter ajudado!!

Falow


2011/8/11 Vitor <info.2s...@gmail.com>



--
Élysson MR
Talk/Email: elys...@gmail.com
MSN:         elys...@live.com
Skype:       elyssonmr
Twitter:       @elyssonmr

Élysson Mendes Rezende

unread,
Aug 11, 2011, 12:38:22 PM8/11/11
to jasperreports-...@googlegroups.com
Kalé? Tranquilo?

Nas propriedades do textfield tem um pattern, vai só precisa escolher a quantidade de casas decimais do valor, na TextFieldExpression você coloca a váriavel do valor e na Expression class coloca como BigDecimal (ou float depende do que você esta utilizando).
Dai o java vai buscaro  local que o relatório esta e trocar o ponto por vírgula e a vírgula por ponto, pois o Java utiliza a notação de moeda EN_US.

Élysson Mendes Rezende

unread,
Aug 11, 2011, 12:38:47 PM8/11/11
to jasperreports-...@googlegroups.com
Acabei de fazer o teste para você

2011/8/11 Vinicios Binsfeld <vinicios...@gmail.com>

Thiago Henrique Silva

unread,
Aug 11, 2011, 12:41:09 PM8/11/11
to jasperreports-...@googlegroups.com
Trata o valor no Java.
Cria um new Big Decimal (5,4).
Ou cria uma mascara para tratar o valor.

--
Thiago H. da Silva

“Nossa maior fraqueza está em desistir. O caminho mais seguro para o

sucesso é sempre tentar apenas uma vez mais.”


Thomas Edison



Élysson Mendes Rezende

unread,
Aug 11, 2011, 12:47:52 PM8/11/11
to jasperreports-...@googlegroups.com
Na verdade depende, você pode tratar no Java e passar o valor pronto, ou você pode passar o BIGDecimal e o report tratar.

Eu fiz o report tratar, no meu parametro chega um numero ( 123456789.99) e o report aplica a mascara e mostra o valor em reais.
Neste caso ficaria assim: R$ 123.456.789,99

Vou encaminhar o arquivo do report para você dar uma olhada, o valor esta em VAR e o textfield esta no titulo.

Abraço

2011/8/11 Thiago Henrique Silva <thds...@gmail.com>
CurrencyMask.jrxml

Vitor

unread,
Aug 12, 2011, 8:35:36 AM8/12/11
to JasperReports / iReport Brasil
Obrigado a todos que responderam.
Élysson, as propiedades da minha variável está igual a sua e não fica
no formato desejado, porém, o valor que chega
está assim :1234,56. Isso poderia interferir?
Outra coisa, o fato do linux e o iReport estar configurado com o
padrão americano pode ser o motivo? Se sim como eu posso configura-
lós?
Valeu!Abç!

Vitor Alves



---------- Forwarded message ----------
From: Élysson Mendes Rezende <elysso...@gmail.com>
Date: Aug 11, 1:47 pm
Subject: [Problema] Formatar moeda
To: JasperReports / iReport Brasil


Na verdade depende, você pode tratar no Java e passar o valor pronto,
ou
você pode passar o BIGDecimal e o report tratar.

Eu fiz o report tratar, no meu parametro chega um numero
( 123456789.99) e o
report aplica a mascara e mostra o valor em reais.
Neste caso ficaria assim: R$ 123.456.789,99

Vou encaminhar o arquivo do report para você dar uma olhada, o valor
esta em
VAR e o textfield esta no titulo.

Abraço

2011/8/11 Thiago Henrique Silva <thdsr...@gmail.com>



> Trata o valor no Java.
> Cria um new Big Decimal (5,4).
> Ou cria uma mascara para tratar o valor.

> --
> Thiago H. da Silva

> “Nossa maior fraqueza está em desistir. O caminho mais seguro para o

> sucesso é sempre tentar apenas uma vez mais.”

>  Thomas Edison

--
Élysson MR
Talk/Email: elysso...@gmail.com
MSN:         elysso...@live.com
Skype:       elyssonmr
Twitter:       @elyssonmr

 CurrencyMask.jrxml
2KViewDownload

Élysson Mendes Rezende

unread,
Aug 12, 2011, 8:44:40 AM8/12/11
to jasperreports-...@googlegroups.com
Sim interfere, porque o Java busca a propriedade de formatos e horários do SO, você pode fazer igual eu faço na minha máquina eu deixo ela em inglês, como se eu estivesse em NY e altero as propriedades de horário e moeda para a do Brasil.
Depende cara, se este valor chegar com vírgula ele já não é mais numero, não concorda? porque a notação de numero utiliza ponto para separar das casas e pelo o que eu entendi esta chegando String, devido a vírgula.


Abraço

2011/8/12 Vitor <info.2s...@gmail.com>

Vitor

unread,
Aug 12, 2011, 10:12:50 AM8/12/11
to JasperReports / iReport Brasil
Ops, me enganei, o valor está chegando igual ao seu mesmo. Todas as
configurações estão iguais, mas mesmo assim não funciona =/...
Ja configurei o iReport para o Brasil e nada. O seu exemplo rodou
perfeitamente, mas o meu não roda.

Abç

On Aug 12, 9:44 am, Élysson Mendes Rezende <elysso...@gmail.com>
wrote:
> Sim interfere, porque o Java busca a propriedade de formatos e horários do
> SO, você pode fazer igual eu faço na minha máquina eu deixo ela em inglês,
> como se eu estivesse em NY e altero as propriedades de horário e moeda para
> a do Brasil.
> Depende cara, se este valor chegar com vírgula ele já não é mais numero, não
> concorda? porque a notação de numero utiliza ponto para separar das casas e
> pelo o que eu entendi esta chegando String, devido a vírgula.
>
> Abraço
>
> 2011/8/12 Vitor <info.2sem.2...@gmail.com>

Élysson Mendes Rezende

unread,
Aug 12, 2011, 10:25:42 AM8/12/11
to jasperreports-...@googlegroups.com
Tenta configurar o sistema, ele busca essas informações de numero data e etc no sistema e não no ireports

2011/8/12 Vitor <info.2s...@gmail.com>

Vitor

unread,
Aug 15, 2011, 8:33:21 AM8/15/11
to JasperReports / iReport Brasil
Finalmente consegui.Tive que fazer isso msm.
Mudei pra português e funcionou porém como eu obrigaria o sistema a
imprimir com vírgula independente do idioma
do SO ?
Obrigado.

On Aug 12, 11:25 am, Élysson Mendes Rezende <elysso...@gmail.com>
wrote:
> Tenta configurar o sistema, ele busca essas informações de numero data e etc
> no sistema e não no ireports
>
> 2011/8/12 Vitor <info.2sem.2...@gmail.com>

Élysson Mendes Rezende

unread,
Aug 15, 2011, 8:51:32 AM8/15/11
to jasperreports-...@googlegroups.com
Boa pergunta!!!!
hehehehehe
Este problema é complicado, porque se você hospedar esta aplicação sua em um servidor com configurações de idioma de outro país vai dar problema.
Vou dar uma olhada e posto aqui qualquer coisa.

2011/8/15 Vitor <info.2s...@gmail.com>

Élysson Mendes Rezende

unread,
Aug 15, 2011, 9:15:05 AM8/15/11
to jasperreports-...@googlegroups.com
Ahá!!! Achei a solução!!!!
Realmente ele pega do sistema, mas vc pode colocar meio que "hardcode" o local que vc quer que sempre seja, ou seja, se o servidor estiver em Marte o relatório será gerado para pt-BR, porque você falou como o relatório deve se comportar.

Utilizando do modo que eu te disse adicione a seguinte linha antes de chamar o relatório:

parametros.put(
"REPORT_LOCALE", new Locale("pt", "BR"));


Mais infos: http://www.guj.com.br/java/25628-valores-double-no-ireport

Flw


2011/8/15 Élysson Mendes Rezende <elys...@gmail.com>

Vitor

unread,
Aug 15, 2011, 9:50:43 AM8/15/11
to JasperReports / iReport Brasil
Valeu, brigadão pela ajuda. Mais tarde eu vou testar e venho aqui.
Vlw

On Aug 15, 10:15 am, Élysson Mendes Rezende <elysso...@gmail.com>
wrote:
> Ahá!!! Achei a solução!!!!
> Realmente ele pega do sistema, mas vc pode colocar meio que "hardcode" o
> local que vc quer que sempre seja, ou seja, se o servidor estiver em Marte o
> relatório será gerado para pt-BR, porque você falou como o relatório deve se
> comportar.
>
> Utilizando do modo que eu te disse adicione a seguinte linha antes de chamar
> o relatório:
>
> parametros.put("REPORT_LOCALE", new Locale("pt", "BR"));
>
>
>
> Mais infos:http://www.guj.com.br/java/25628-valores-double-no-ireport
>
> Flw
>
> 2011/8/15 Élysson Mendes Rezende <elysso...@gmail.com>
>
>
>
> > Boa pergunta!!!!
> > hehehehehe
> > Este problema é complicado, porque se você hospedar esta aplicação sua em
> > um servidor com configurações de idioma de outro país vai dar problema.
> > Vou dar uma olhada e posto aqui qualquer coisa.
>
> > 2011/8/15 Vitor <info.2sem.2...@gmail.com>
Reply all
Reply to author
Forward
0 new messages