[firebase-br] Numeric(15,2) maluco...
Walter Portugal
walter_cangere em hotmail.com
Ter Jun 13 08:53:41 -03 2006
É 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
Mais detalhes sobre a lista de discussão lista