Bom tarde Pessoal,
Tive um problema ao armazenar o valor 1.116.849,55 em um campo Float de uma tabela no meu banco de dados.
O valor foi armazenado nesse formato: 1.11685e+006
Alguém sabe porque isso aconteceu?
Obrigada.
^^
Bom tarde Pessoal,
Tive um problema ao armazenar o valor 1.116.849,55 em um campo Float de uma tabela no meu banco de dados.
O valor foi armazenado nesse formato: 1.11685e+006
Alguém sabe porque isso aconteceu?
Obrigada.
^^
Poste pra gente como você fez para armazenar esse valor. Pode ser que tenha algo errado ali.
Da uma olhada nesse site, tem uma tabela que fala sobre as variáveis.
http://www.dm.ufscar.br/~waldeck/curso/java/part22.html
Tente utilizar double no lugar de float, pois double pode receber um numero maior que o float. Provavelmente você esta atribuindo um valor pro float que ele não suporta.
flws!
Da uma olhada nesse site, tem uma tabela que fala sobre as variáveis.http://www.dm.ufscar.br/~waldeck/curso/java/part22.html
Tente utilizar double no lugar de float, pois double pode receber um numero maior que o float. Provavelmente você esta atribuindo um valor pro float que ele não suporta.
flws!
O valor que ela quer o float até suporta, mas tem uma perda de precisão nele. Utilizar double quase sempre é melhor mesmo.
Um exemplo é esse trecho simples:
Isso imprime 1116849.5, que é perto do valor que foi armazenado no banco. Mas eu suspeito que o arredondamento pra 1116850 não tenha sido do float, por isso pedi que ela postasse o código da inserção.
Suporta, mas não com precisão. Float está sempre sujeito a arredondamentos.
Em geral, é má idéia usar float em sistemas, prefira sempre double.
Floats só são usados em nichos onde não existe necessidade de muita precisão, e o número de floats é muito grande.
Um exemplo disso é na computação gráfica, onde uma malha de um modelo 3D pode ter centenas de milhares de pontos, cada um com 4 floats para as coordenadas, 2 para as normais de luz e 10 para os materiais.
Agora, se estiver lidando com valores financeiros, trabalhe com BigDecimal.
Senhores,
Realmente o problema aconteceu por ser um Float, modifiquei para Double e obtive o valor correto!
É uma aplicação financeira sim, não sabia que usar BigDecimal era melhor, então vou dar uma olhada pra implementar essa modificação.
Obrigada a todos pela ajuda.
Big decimal seria o mais preciso de todos ?
Big decimal seria o mais preciso de todos ?
Sim, por dois motivos:
o BigDecimal representa cada dígito decimal (e não dígitos binários)
o tamanho da mantissa e a posição do ponto são arbitrárias
Em compensação:
Eu também incluiria o fato de que os cálculos são bem mais lentos com BigDecimal.
Claro, se você estiver só calculando algumas médias para relatórios, isso não pode ser um problema.
Mas não sonhe jamais em usar algo assim para um sistema de engenharia, reconhecimento de padrões, ou processamento de imagens.
Eu também incluiria o fato de que os cálculos são bem mais lentos com BigDecimal.Claro, se você estiver só calculando algumas médias para relatórios, isso não pode ser um problema.
Mas não sonhe jamais em usar algo assim para um sistema de engenharia, reconhecimento de padrões, ou processamento de imagens.
Com certeza. Fiz um sisteminha que utiliza BigDecimal nos campos. Ao receber o valor, ele converte o valor de acordo com a escala que eu colocar para ele. Porém, esta conversao a cada foco perdido, se o processador esta ocupado com algo mais, pode acontecer de dar um pequeno lag rsrs
Realmente fica mais pesado, mas se for poucos campos como no meu caso, compensa por causa da precisão.
Como o amigo rmendes08 disse, ele nao possuir os operadores + - / *, mas ele possui os métodos que lhe permite fazer isso.
Para a persistencia, campos eu estava utilizando como DECIMAL(5,3), por exemplo. De uma olhada nisso também…
Abraços
cuidado tambem ao usar campos double no banco, pois os mesmos problemas que se tem com double nas linguagens de programação voce vai ter no banco.
Para valores procure dar preferencia a campos do tipo numeric(x,x)/decimal(x,x)