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