Obrigado pela dica Demian,
Irei fazer pegando a diferença,
Pois o meu problema é  depois que for feito o calculo eu terei que gerar um
arquivo texto para depois um outro sistema pegar este campo e jogar no banco
de dados, no banco de dados o campo é numeric ae então vou ter que deixar
duas casas decimais no arquivo texto e diminuir ou somar a diferença no
ultimo registro .
Se vc sober ou se vcs soberem algo mais pratico para esta questã
E se soberem tbem como faço para aproximar o maximo possível do valor antes
de gerar o arquivo texto
Agradeço
Por favor gostaria de receber dicas!!




-----Mensagem original-----
De: Demian Lessa [mailto:[EMAIL PROTECTED] 
Enviada em: quarta-feira, 23 de fevereiro de 2005 17:50
Para: delphi-br@yahoogrupos.com.br
Assunto: Re: [delphi-br] Divisao decimal Diferenca com o Banco


Ao invés de Float, tente padronizar com Currency caso esteja lidando com 
valores monetários. Se você utiliza *de fato* ponto flutuante em suas 
operações, terá que entender o que é e como operar com algarismos 
significativos (qualquer curso de física deve abordar o assunto). A mais 
importante questão do uso de valores reais é a consistência do uso dos 
tipos no banco e na programação de modo a não "perder" precisão ao longo 
das operações inadvertidamente. Consulte o help ou manual do Delphi para 
saber quantos algarismos significativos cada tipo real suporta e como 
esses valores são suportados.

Em geral uma simples função de erro deveria resolver seu problema caso a 
padronização dos tipos não resolva seu problema. A função de erro é uma 
forma de comparar valores ponto flutuante não pela igualdade, mas pela 
proximidade suficiente a tal igualdade. Você define uma constante E a 
partir da qual dois números são considerados iguais:

  SE (||A| - |B|| <= E) ENTÃO OS REAIS SÃO CONSIDERADOS IGUAIS

No Delphi, não lembro de ter precisado disso. Sempre que tive problemas 
dessa natureza, bastou analisar a coerência dos tipos usados que tudo se 
resolveu. No Fortran, em C e no antigo Turbo Pascal, já tive que usar 
artifícios desse tipo (programas de engenharia, matemática, etc).

No caso do 200/15, uma dica- em minhas rotinas de cálculo de parcelas 
uso o conceito de graus de liberdade. É assim. Se você tem 5 parcelas, 
você tem liberdade de definir apenas 4 desses valores pois o 5 é 
definido automaticamente pela equação:

   P5 = TOTAL - P1 - P2 - P3 - P4;

Isso garante que sua soma será *sempre* a esperada! ;)

Cordialmente,

Demian Lessa
Salvador - Brasil

giuvany wrote:
> Pessoal    
> 
> Seguinte estou com problema na formatacao e inclusao de valres no banco de
> dados,
> 
> Bom  no meu Banco de Dados tenho um campo 
> 
>  
> 
> VITEM         NUMBER(15,2)
> 
>  
> 
> E no meu programa o usuário vai digitar um valor total e eu terei que
> dividir este
> 
> Valor por uma quantidade  X   e colocar este valor dividido no campo da
> Tabela VITEM
> 
> Bom ae faço assim
> 
>  
> 
> var
> 
> c:string;
> 
> b,valor_sub,a:double;
> 
>  
> 
> begin
> 
> valor_sub:=(StrToFloat(edit3.text) / StrToFloat(edit2.text));
> -------->>>valor_total dividido pela quantidade
> 
> a:=StrToFloat(edit3.text));
> 
> b:=StrtoFloat(edit4.text);
> 
> b:=b* dm_principal.Qry_Prestador_ambquantidade_consulta.value;
> ------------------- refazer calculo para verificar
> 
> showmessage('valor b'+floattostr(b)); ------ coloquei só vizualizar
> 
> c:=floattostr(a-b);  ------- só par aver a diferenca
> 
> showmessage('diferenca c'+(c));  ------ coloquei só vizualizar mostra a
> diferenca
> 
>  
> 
> então o que acontece
> 
>  
> 
> Quando vou colocar no Banco de dados estas informacoe elas entram com
> diferenca
> 
>  
> 
> Vamos supor  Valor Total =200
> 
>                      Quantidade=15
> 
>                      VITEM= 13,33333333333333
> 
>  
> 
> Na inserção no Banco fica 13,33
> 
> Mas na Soma  no Banco ae Fica 199,95                
> 
>  
> 
> O que me da 0,05 diferenca de alguns centavos não chegando a 200,00
> 
>  Alguém sabe onde estou errando?
> 
> Ou se neste caso vou ter que incrementar um VITEM com a Diferenca?
> 
> Desde já agradeco


-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos




 





-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a