[firebase-br] RES: Integer OverFlow no cálculo baseado na tabela price

Jose Aparecido da Silva joseasilva em bol.com.br
Sex Jan 29 15:25:32 -03 2010


Tive um problema assim outro dia e após muita tentativa resolvi utilizando
Doublé Precision
Pelo meu entendimento não deveria estourar, mas o FB não aceito o calculo
dentro da procedure

[ ]'s

Jose Aparecido da Silva
Fasystem

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Altair Aquino
Enviada em: sexta-feira, 29 de janeiro de 2010 12:04
Para: FireBase
Assunto: Re: [firebase-br]Integer OverFlow no cálculo baseado na tabela
price

Amigo já tentou com FLOAT?


Altair O. Aquino
_______________________________
Software Engineer
J2EE/Struts/GWT/Hibernate
E-mail/Gtalk: altairaquino em gmail.com
MSN: altairaquino em hotmail.com
Phone: +55 85 9608-9771


2010/1/29 Junior Miranda <jrmiran em gmail.com>

> Caros mestres...
> ...Estou com o seguinte problema quando tento fazer um cálculo baseado na
> tabela PRICE (integer OverFlow). Sei que este erro é provocado, quando
> ultrapasso a faixa limite de um tipo de dado. Já tentei fazer cast de tudo
> quanto foi geito. Mas em determinados valores, olha ele lá de volta.
> Qualquer ajuda será bem vinda.
>
> Utilizo:
>  O Firebird 2.0 com Dialect 3;
>  Os Campos MyTaxa, MyBase,  MyResult e MyBase são do Tipo Numeric(18,8).
> Usei esta Precisão e Escala para diminuir ao máximo a possibilidade de
> perda.
>
> Pelo que já estudei, sob estas condições, o firebird armazenaria o valor
em
> um BigInt. Então o meu cálculo estaria ultrapassando o valor de um BigInt
?
>
> IF ((MYTAXA > 0) AND (MYPARCELAS > 0)) THEN
>        BEGIN
>          MYTAXA = CAST((:MYTAXA / 100) AS NUMERIC(18,8));
>          MYBASE = 1 + CAST(MYTAXA AS NUMERIC(18,8));
>          MYRESULT = MYBASE;
>          MYINDEX = 1;
>          WHILE (MYPARCELAS > MYINDEX) DO
>            BEGIN
>              MYRESULT = CAST(MYRESULT AS NUMERIC(18,8)) * CAST(MYBASE AS
> NUMERIC(18,8)); -- Erro aqui
>              MYINDEX = MYINDEX + 1;
>            END
>            MYRESULT = CAST((:MYTAXA * MYRESULT) AS NUMERIC(18,8)) /
> CAST((MYRESULT - 1) AS NUMERIC(18,8));
>            MYRESULT = CAST(:MYCAPITAL AS NUMERIC(18,4)) * :MYRESULT;
>        END
> ______________________________________________
> 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
>
______________________________________________
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