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

Altair Aquino altairaquino em gmail.com
Sex Jan 29 12:03:49 -03 2010


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
>



Mais detalhes sobre a lista de discussão lista