[firebase-br] Erro de Arredondamento
Sandro Souza
escovadordebits em gmail.com
Ter Jan 14 12:12:50 -03 2014
Bom dia/tarde/noite Alisson.
Meu nobre amigo, são muitos os fatores que podem estar ocasionando essa
diferença de precisão.
1 - Dialeto da base de dados.
Procure criar sempre as bases de dados com o dialeto 3, pois nos
dialetos anteriores (1 e 2) os campos do tipo numeric e decimal são
vistos como Double pelo Delphi, e daí causa esse tipo de imprecisão
numérica.
No dialeto 3, o Firebird procura sempre trabalhar internamente com
valores inteiros, divindindo-os e multiplicando-os por potências de 10
apenas quando necessários devido às casas decimais.
Até o presente momento, não sei de qualquer forma de mudar o dialeto de
uma base de dados já criada, apenas recriando a base no dialeto 3.
2 - Se você usa o método AsFloat dos campos, está lendo ou salvando
valores como Double, ou seja, com uma possível imprecisão numérica (1
ficaria 0.999999999999999999999).
Procure usar, se possível, sempre o método AsCurrency, pois o tipo
Currency é um Int64 (inteiro de 64 bits) disfarçado de valor decimal, ou
seja, nesse ponto o Delphi também usa essa idéia do Firebird de procurar
armazenar valores decimais internamente como inteiro, multiplicando ou
dividindo o valor do Int64 por 10000 para dar as 4 casas decimais nas
operações matemáticas, mas a precisão numérica é a melhor possível, e é
por isso que deve ser utilizado principalmente para os valores
monetários (salário, custo, etc...), justamente pela melhor precisão
numérica.
Espero ter ajudado mais que atrapalhado. :D
Em 14-01-2014 10:30, Alisson Santos - Union Tecnologia da Informação
escreveu:
> Bom dia pessoal.
>
>
>
> Estou tendo um problema de arredondamento.
>
> Estou passando para o banco de dados o valor de 161944,15 e o mesmo está
> gravando o valor de 161944,16.
>
> Alguém pode me auxiliar?
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista