Duvida com Representação de Moeda.
09/07/2015 16:05
0
Galera, tudo na paz. 
?Gente, o problema agora é o seguinte: 
Estou tentando salvar um valor monetário no meu domínio. 

BigDecimal valorTotal

e no meu controller uso assim. 

compra.valorTotal = new BigDecimal(params.compra.valorTotal)

se eu passo um valor no input de  1.221,12 por exemplo. Eu recebo o erro NumberFormatException 

Estou usando o plugion jquery para formatar automaticamente meu input, para que o usuário se se preocupe em digitar os números, por isso estão usando uma string.  

<g:textField  pattern="" class="form-control text-right valid" name="valorTotal" value="${compraInstance?.valorTotal}" />

Estou pensando em usar joda-money, mas acredito que deve existir alguma outra forma de fazer isso. 




Outra coisa, estou usando o postgres para como banco de dados, quando mando o algum valor como 12,4  tudo dar certo, porem na hora de atualizar eu recebo o valor 12.4 . Caso eu queira alterar outra propriedade do domínios, sem mexer no valorTotal, eu percebo que eu estou enviando para o controle 12.4 mas no meu banco tenho valores loucos. Como pode isso, será que no update eu tenho que fazer algum artifício (Gambi) para apresentar o valor de 12,4 no formulário. 

Quem puder me ajudar, estou quebrando muito a cabeça com isso, abraço galera.
Tags: BigDecimal, Number, Format


0
Você não tem que salvar uma string.
Você tem que salvar um DOUBLE ou FLOAT talvez.
O que vc tem que fazer é na camada visual (VIEW) é exibir esse valor no formato que você deseja!

Então aconselho você a mudar o tipo para double, inserir um valor double, e na tela exibir formatado. Que afinal ... é o que você quer.
Você so complicou um pouco.

Costumo ussar esse plugin > http://plugins.jquery.com/maskMoney/


0
?Ok, eu estou usando o jquery.price_format.2.0.js, mas isso não vem ao caso. 
Independentemente do Plugin utilizado, sempre o que enviamos são Strings. Usando o bind o grails automaticamente converte para o tipo de dados mais adequado para a propriedade do domínio.  Mas não meu caso, não optei por usar o bind, o que faz com que no controle, fique que meio orientado a strings kk, Populo cada propriedade com param.nomeDaPropriedade, que vem pelo action. 

Quando, chego na propriedade de valorTotal, preciso passar um BigDecimal, pois a propriedade do domínio é essa, quando passo   compraInstance.valorTotal =  new BigDecimal("params.valorTotal"), recebo o erro  NumberFormatException somente quando coloco no input valores grandes como 12.548,84. Quando passo 12,58 consigo salvar sem problemas. 

Outra coisa, é necessário passar uma string para o construtor do BigDecimal, pois se eu passo um double, ou float, automaticamente o construtor vai tentar converter para double e isso não é recomendado na documentação. kk
Alguma outra ideia?  
10/07/2015 10:02


0
Não disse para passar um double no construtor do BigDecimal... disse para salvar double ou float...  de preferência double.
Mas...em todo caso...
A String esta indo com "." ?
Tente tirar o ponto e deixar só a vírgula das duas ultimas casas. 
Ja vi BigDecimal ter problemas com isso.  Ter mais de uma vírgula dava pau... mais de um ponto..dava pau. Por isso que o valor que vc coloca com uma vírgula so ...vai tranquilo.
Ele aceita uma String como entrada ... mas tem um formato "aceitável" !

Ou eu posso ta falando besteira = )

tenta ai...não custa nada!

Ja tentou ?


0
Isso, na verdade eu consegui "resolver" o problema com replece,  troco todos os pontos por nada, e depois troco a virgula por ponto, fica algo como 1.548.258,21 retornando 1548258.21 , não sei se esse deve ser o valor salvo no banco, ou se posteriormente terei algum problema para efetuar calculos. 
10/07/2015 17:59


0
Referente a cálculos não tem problema algum... o ponto é uma uma marcação para facilitar a visualização de valores.

1.000,00
1000,00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto