Erro no arredondamento.
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
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
Curtidas 0
Respostas
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.
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
Emerson Nascimento
18/09/2010
https://www.devmedia.com.br/forum/delphi/14433-parcelamento-com-entrada.html
https://www.devmedia.com.br/forum/delphi/12855-Ajuda-com-Parcelas-em-Delphi.html
https://www.devmedia.com.br/forum/delphi/12855-Ajuda-com-Parcelas-em-Delphi.html
GOSTEI 0
Eriley Barbosa
18/09/2010
Utilize a função, SimpleRoundTo no lugar de RoundTo, declare Math na Uses.
GOSTEI 0
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.
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