Calcular Juros boleto (Diferença entre Delphi e Calculadora)

Delphi

05/06/2018

Olá pessoal bom dia,
Temos um problema aqui na empresa... Quando o boleto do cliente vence, temos que fazer o cálculo via Delphi, só que no final sempre da diferença de centavos e o financeiro vive reclamando que tem que ficar lançando manualmente taxas para fechar os valores.
Por exemplo no Delphi o cálculo é feito da seguinte maneira:
Calculando o Juros:
Vou colocar os valores para ficar mais fácil: 0 := (3276,84*((9,9/30)/100)) = Resultado: 10,82
Ai no caso desse cliente ele atrasou 8 dias então o sistema faz mais um cálculo: 0 := (8*10,82) = 86,56 de Juros
Calculando a Multa: 0:= (3276,84*(2/100)) = Resultado: 65,54
E finalmente: Total := (3276,84+65,54+86,56) = Resultado: 3.428,94

O que acontece? O banco ele calcula que nem o financeiro faz na calculadora
Calculando o Juros:
3276,84*0,33%=*8=86,508576 Resultado: 86,51 (Fica 0,05 centavos diferente do cálculo do Delphi)
Calculando a Multa: 3276,84*2%=65,5368 Resultado: 65,54 (Bate com o Delphi)
Resultado Final: 3276,84+86,51+65,54 = 3.428,89

Desculpa o tamanho do texto, mas quis passar os detalhes para ficar melhor o entendimento.

Se alguém puder me ajudar fico grato.
Wagner Novaes

Wagner Novaes

Curtidas 0

Melhor post

Jerson Boer

Jerson Boer

05/06/2018

Olá Wagner.. O seu problema no Delphi está no arredondamento das casas decimais.. Você está usando alguma função que arredonde na hora de calcular? Se usar esse mesmo valor seu, em um dos exemplos, sem arredondamento, os valores coincidem com o da calculadora que seria 10,813572 e você apresentou 10,82 que ao final com certeza vai dar diferença.
GOSTEI 1

Mais Respostas

Wagner Novaes

Wagner Novaes

05/06/2018

Jerson primeiramente obrigado por tirar um tempo para poder me ajudar...
Foi isso mesmo, eu estava arredondando o valor para Multiplicar*8 por isso estava dando a diferença.

Agora bateu, eu tinha que multiplicar * 10,813572

Foi uma falta de atenção,
Grato,
Wagner
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

05/06/2018

Tente :
uses
Math,

var
Dias_Atraso    :Real;
Valor_Original :Real;
Percet_Dia     :Real;

Juros          :Real;
Multa          :Real;
Novo_Valor     :Real;

begin

Dias_Atraso    := 0;
Valor_Original := 0;
Percet_Dia     := 0;

Juros          := 0;
Multa          := 0;
Novo_Valor     := 0;

        Dias_Atraso:=8;
        Valor_Original:=3276.84;

// Se   Percet_Dia:=0.33; apresenta erro
        Percet_Dia:=0.3303;


        Juros:=(Valor_Original)*(Percet_Dia)/100;
        Juros:=RoundTo(Juros,-2)*Dias_Atraso;

        Multa:=Valor_Original*2/100;
        Multa:=RoundTo(Multa,-2);

        Novo_Valor:=(Valor_Original)+(Juros)+(Multa);
        Novo_Valor:=RoundTo(Novo_Valor,-2);

end;
GOSTEI 0
POSTAR