[firebase-br] Stored Procedures & Delphi

eduardo eduardo em icontroller.com.br
Qui Mar 17 18:54:45 -03 2005


Adilson

Este problema de arredondamento e valores de ponto flutuante é um 
inferno. Arredondamento de ponto flutuante depende das caracterísiticas 
do processador e não da linguagem de programação envolvida. Talvez seja 
por isso que em uma estação ocorre o problema e em outra não.

Toda vez que vc pede um valor AsFloat, você está sujeito a 2+2 ser algo 
como 3,99999999.

Se você usar AsCurrency, as FMTBCD ou AsBCD, teoricamente, os problemas 
acabam, desde que no BD seus campos não sejam Float e sim Numeric(N,N);

Para cálculos internos dentro de seu Aplicativo, há uma Unit que 
arredonda segundo 9 critérios diferentes e paraticamente garante que 
4,04 não é 4,0399999. Utilizamos aqui com bastante sucesso.

o link para baixá-la é http://cc.borland.com/ccweb.exe/listing?id=21909

ou no Google DecimalRounding_JH0

Espero tê-lo ajudado

[]s Eduardo

Adilson Capua Jr. wrote:
> Desculpe se for OFF, não tenho certeza! Bom, alguém já tentou receber algum parâmetro do tipo NUMERIC(12,2) usando uma SP pelo Delphi? Há um bom tempo atrás, quebrei a cabeça durante um bom tempo achando que uma rotina de caixa que eu tinha estava errada, visto que ele dava uma diferença de centavos no saldo final. Depois de muito apanhar, descobrir que quando o saldo dava 200,45 por exemplo o Delphi recebia da SP somente 200,40... Bom, fiz uns ajustes e tive que salvar esse saldo numa tabela e através de um select buscava.
> Hoje isso aconteceu novamente... Tenho um programa que usa micro-terminais para coleta de dados e um determinado cliente me ligou hoje dizendo que, quando lança uma ocorrência pelo sistema, fica certo. Quando lança pelo terminal ... PUM... erro no valor... O terminal não utiliza tabela nenhuma para se comunicar com o banco... Simplesmente ele dispara sp's que se encarregam do serviço. Só que tem uma SP que tem que retornar um valor de ponto-flutuante (12,2) para o terminal executar um cálculo e devolver para outra SP... Sim, talvez eu poderia fazer tudo dentro do banco, mas creio que isso vai levar algum tempo, até eu reescrever...
> Alguém já passou por isso??? Como resolveu o problema...
> 
> Estou usando o Delphi 7, DBX e Firebird 1.5!!!
>  
> []'s
>  
> Ps.: CANTU, desculpe se isso é OFF, mas tem problemas que a gente descobre que ficar postanto em áreas do Delphi ninguém vai responder ou pelo menos ter uma idéia, visto que o problema está justamente em passar/receber um parâmetro do nosso Firebird para o Delphi! De qualquer
> forma, vou postar o assunto no News também...
>  
>  
> 
> 
> 
> Adilson Bragança Cápua Jr.
> Linhares - ES                         Brasil
> mailto: juniorcapua em yahoo.com.br
> "Save a tree. Send an e-mail."
> 
> 		
> ---------------------------------
> Yahoo! Mail - Com 250MB de espaço.  Abra sua conta!
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> 





Mais detalhes sobre a lista de discussão lista