[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