Eu leio o dado do banco de dados (postgresql) onde está armazenado numa coluna como “real”. (uso hibernate)
Eu mostro o dado sem nenhum cálculo ou tratamento na minha view.
Normalmente o valor aparece de forma correta, porém as vezes o valor vem diferente:
Por exemplo:
para 5.111 -> 5.1110001
para 1.111 -> 1.110999
para 0.99 -> 0.99000001
para 0.8 -> 0.80000001
para 0.7 -> 0.69999999
para 0.3 -> 0.30000001
para 0.2 -> 0.2 (vem certo)
para 0.15 -> 0.15000001
para 0.1 -> 0.1 (vem certo)
Uso o VRaptor, por isso coloquei nesse forum. Se for necessário posto em outro.
Na verdade sua dúvida é de pgsql X money, e isso deveria ser tratado em outro subfórum mesmo. Mas vamos lá…
Como você está construindo seu BigDecimal? O correto é construir ele a partir de uma String, pois se você usar o contrutor com double/float você perde a precisão. Eu tenho usado BigDecimal com pgsql e tudo funciona bem, para qualquer valor.
Esse erro acontece ao ler do banco ou quando vocẽ persiste? Você está usando os converters localizados do Vraptor?
Abraços
L
Lagaffe
Garcia,
Esse erro acontece quando leio do banco de dados. Mesmo antes de mostrar na view já estão distorcidos.
No meu projeto, estou testando a aplicação e inserindo esses dados apresentados, diretamente no banco, via pgAdmin.
Estou sim usando os converters do VRaptor
Construo quando necessário a partir de uma String. Lí sobre isso no Blog da Caelum. Não tenho tido problema com cálculos.
G
garcia-jj
Passe todas as informações possíveis, principalmente como estão mapeados o campo na entidade, a definição do banco… etc.
L
Lagaffe
Garcia,
Resolvido!
Alterei diretamente, via pgAdmin, o campo do pgsql de real para numeric(10,2) e aparentemente o problema sumiu.
Pelo que me lembre o campo tinha sido criado, pelo hibernate, quando ainda trabalhava com Float.
Obrigado, só de ter de explicar o problema faz refletir melhor.
G
garcia-jj
:thumbup:
Eu ainda não conhecia esse real, mesmo usando pgsql há algum tempo :oops: