[firebase-br] Integer overflow durante operação aritmética

Gabriel Hilbig ghilbig em bol.com.br
Qua Nov 1 17:08:54 -03 2006


Já tive este problema

Vc resolve fazendo CAST

CTB_VALOR_RATEADO =   cast( (VALOR / VALOR_TOTAL) as NUMERIC(13,2));
CTB_VALOR_PAGO =  cast ( (CTB_VALOR * CTB_VALOR_RATEADO)as NUMERIC(13,2));


-- 
Gabriel Hilbig

"Rodrigo A. de Freitas" 
<rodrigo em solucoeseinformatica.com.br> 
escreveu na mensagem 
news:35027.200.210.249.232.1162323008.squirrel em webmail.solucoeseinformatica.com.br...
Salve pessoal da lista!

Estou com o seguinte problema:

Eu tenho uma SP (usando FB 1.5.3, dialeto 3) que efetua diversas rotinas
após a emissão do cheque. Dentre essas rotinas, eu tenho uma em específico
que me gera um lançamento contábil, e em determinado momento eu preciso
fazer um cálculo de proporcionalidade em um valor.

O problema é que, para que o cálculo me retorne o valor correto, eu
preciso utilizar TODAS as casas decimais possíveis. Para tanto, eu
declarei a variável CTB_VALOR_RATEADO como FLOAT. ex.:

/* RATEIA O VALOR PROPORCIONALMENTE AO VALOR PAGO DO TÍTULO */

CTB_VALOR_RATEADO = (VALOR / VALOR_TOTAL);
CTB_VALOR_PAGO = (CTB_VALOR * CTB_VALOR_RATEADO);


os campos acima possuem os seguintes valores:

VALOR = 6788,14
VALOR_TOTAL = 19548,80
CTB_VALOR = 19548,80

o resultado da divisão VALOR / VALOR_TOTAL retornado pelo FB é
0,347200006246567.

Problema 1: ao multiplicar o valor obtido pelo conteúdo do campo
CTB_VALOR, o FB me dá o erro "Integer overflow.  The result of an integer
operation caused the most significant bit of the result to carry"

Problema 2: o resultado da divisão é incorreto; O cálculo deveria ter dado
0,34724075135046652479947618268129 (testado pela calculadora do windows)

Alguém tem uma pista de porque o FB calculou errado a divisão e porque eu
recebo essa excessão ao multiplicar os valores ?

[]'s

Rodrigo A. de Freitas

Análise & Desenvolvimento
Soluções & Informática




______________________________________________
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







Mais detalhes sobre a lista de discussão lista