[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