Erro no arredondamento.

Delphi

18/09/2010

Bom dia pessoal,

Pesquisei aqui no fórum sobre arredondamento de valores, o pessoal tem algumas idéias ótimas para serem aproveitadas nos aplicativos que nós desenvolvemos.

Então como estava precisando de um código que arredonda-se valores, peguei algumas dicas e aproveitei no meu aplicativo de vendas.

Aparentemente tudo estava funcionando legal, mas infelizmente esta acontecendo um pequeno detalhe, não sei se tem a ver com o arredondamento em sí, pois desconfio muito dele na hora de fazer a divisão das parcelas.

Código:

Valor da Venda: (Valor_Total) : R$ 60,72

// Calcula o valor da prestação.
nCalcPrestacao   := RoundTo(Valor_Total / 3,-2);

Esta pequena linha de código pega o valor total da venda e divide por 3.

Muito simples, correto, mas não veja o exemplo que ele me retorna quando eu faço a divisão.

Valor de cada prestação (Entrada + 30 e 60 dd) para pagamento : R$ 20,24 (calculada no código acima)

Multiplicando então por : 3

Daria na Calculadora : R$ 60,72

Mas na soma que o meu programa faz (somando a entrada mas o valor de 30 e 60 dd), retorna o valor de R$ 60,71.

Acredito realmente que seria o arredondamento, pois a divisão dá R$ 20,24 e multiplicando por 3 tudo pelo sistema, dá o valor de R$ 60,71 e não R$ 60,72 como seria ao certo.

Isto é plenamente visivel quando ele gera o carnê. Alguns clientes até reclamam sobre este 1 centavo, pois quando eles vão fazer as contas, veem que estão pagando 1 centavo a mais.

Então preciso resolver isto, para que ele calcule exatamente o valor e não fique fazendo diferenças.

O programa é para gerenciar vendas de produtos, que são parcelados para os clientes.

Grato a todos mais uma vez.

t+
Valnei






Valnei Reis

Valnei Reis

Curtidas 0

Respostas

Matheus Freitas

Matheus Freitas

18/09/2010

bom dia valnei,

tambem já passei por isso.
o que pode ser feito é o seguinte:

vc armazena o valor total da venda.
depois vc percorre o dataset somando os valores das prestações,
possivelmente irá dar essa diferença de 0,01 centavos.
aí vc faz o valor total das prestações - valor total das compras
e a diferença vc acrescenta ou tira da ultima parcela.

com funções de arredondamento nao consegui uma que funcionasse.
somente desta maneira.
espero ter ajudado.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

18/09/2010

Utilize a função, SimpleRoundTo no lugar de RoundTo, declare Math na Uses.
GOSTEI 0
Valnei Reis

Valnei Reis

18/09/2010

Boa noite pessoal.

Vou seguir todas as orientações postadas aqui neste tópico.

Depois retorno dizendo qual foi mais viável ao meu problema. e depois compartilho com vocês o código, para quem sabe possa também ajudar.

Um forte abraço a todos e agradeço muito a ajuda dispensada.

Valnei.
GOSTEI 0
POSTAR