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

Otto ottofuch em terra.com.br
Ter Jun 13 11:59:40 -03 2006


Se você possuir o livro Dominando Firebird da Helen Borrie, vale a pena ler
na página 123 em diante sobre "Tipos Decimais Fixos (com Escala)" e as
peculiaridades em relação à precisão, e as diferenças/semelhanças entre
NUMERIC  e DECIMAL. Por exemplo, com precisão de 1 a 4, o NUMERIC usa
SMALLINT e o DECIMAL usa INTEGER.
Na precisão de 5 a 9, ambos usam INTEGER.
Na precisão de 10 a 18, ambos usam BIGINT (mas o Dialeto 1 usa DOUBLE
PRECISION).
Me parece que o assunto já foi discutido na lista.
[]´s
Otto

----- Original Message ----- 
From: "Walter Portugal" <walter_cangere em hotmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Tuesday, June 13, 2006 8:53 AM
Subject: Re: [firebase-br] Numeric(15,2) maluco...


É o seguinte:

Pelo que eu sei, no Firebird, os campos numéricos são armazenados no banco
como Long Integer e guardando a precisão. Portanto, se você enviar um
determinado valor para um campo numérico sem arredondá-lo antes, mesmo ele
sendo (15,2), estará armazenando a precisão completa.

Não sei se ajudei, mas já tive esse problema várias vezes com implementações
legadas que não tratavam esse problema e causando grandes problemas de
cálculos nos sistemas...

T+,

Walter



> Date: Mon, 12 Jun 2006 10:59:38 -0300> From: news.pj em gmail.com> To:
lista em firebase.com.br> Subject: [firebase-br] Numeric(15,2) maluco...> >
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.> >
______________________________________________> FireBase-BR
(www.firebase.com.br) - Hospedado em www.locador.com.br> Para editar sua
configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br> Para
consultar mensagens antigas: http://firebase.com.br/pesquisa
_________________________________________________________________
Porque enviar email pelo seu celular deve ser fácil: experimente a versão
beta do Windows Live Mail for Mobile
http://ideas.live.com/programpage.aspx?versionId=6e782662-5f2a-4161-a64a-7f63644e1f0a
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa







Mais detalhes sobre a lista de discussão lista