[firebase-br] Numeric(15,2) maluco...

Pedro news.pj em gmail.com
Seg Jun 12 10:59:38 -03 2006


Pessoal, desta vez é o seguinte...

A tabela tem os seguintes campos :

codigo ( Inteiro) ,
qtd ( Inteiro),
vlrund Numeric(15,2),
Total Numeric(15,2).

Esta tabela é alimentada pela aplicação do cidadão lá. Fizemos o
seguinte teste via IBExpert:

Select codigo, qtd, vlrUnd, valor, Cast(qtd*vlrUnd as Numeric(15,2)) Calculado
from Tabela
where Cast(qtd*vlrUnd as Numeric(15,2))<>valor

Como resultado, tivemos algo assim :

codigo    QTD	VLRUND           TOTAL         CALCULADO
10534       54	     270,24        14592,96               14592,96
10212	    12       288,45          3461,40                3461,40
10312        12      288,45          3461,40                3461,40
11082        31      236,65          7336,15                7336,15
10260	     60      270,24        16214,40              16214,40

E por aí vai...

No olho, onde está a diferença? Até levamos pro excel pra ver se tinha
a ver com aproximação decimal, tira-teima... Nada! Voltamos ao
IBExpert, e visualmente tudo OK. Então clicamos 2x sobre o campo
"Total", na primeira linha e lá apareceu : 14592,9599999999991. Visto
isso, clicamos também no campo "Calculado". E lá apareceu :
14592,960000000001. Ahááá !!!

Daí...

Alguém sabe explicar que loucura é essa? Como contornar essa
maluquice? Na aplicação os dados são passados para o insert já
arredondados para 2 casas decimais.Será o firebird, via Numeric,
fazendo doideira ou o IBExpert que tem bug? Firebird 1.5 RC2, IBExpert
2.5.0.22 Personal Edition. Alguém vá viu isso?

At,
Pedro.




Mais detalhes sobre a lista de discussão lista