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

Junior Miranda jrmiran em gmail.com
Sex Jan 29 11:48:07 -03 2010


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


Mais detalhes sobre a lista de discussão lista