Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Popin

[Resolvido] Calcular Diferença Parcela

Recommended Posts

Ola.. precido montar um algoritmo que trate o problema do ultimo centavo que falta quando gero as parcelas no contas a pagar. Por exemplo uma conta 100,00 / 3 = 33,33 e falta o ultimo centavo e eu queria colocar a ultima parcela com 33,34 ma nao tenho nem ideia de como fazer. Alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola.. precido montar um algoritmo que trate o problema do ultimo centavo que falta quando gero as parcelas no contas a pagar. Por exemplo uma conta 100,00 / 3 = 33,33 e falta o ultimo centavo e eu queria colocar a ultima parcela com 33,34 ma nao tenho nem ideia de como fazer. Alguem pode me ajudar?

 

Amigo

Fiz um pequeno exemplo para você

segue o código abaixo, qualquer duvida é só postar

 

procedure TForm1.btGerarClick(Sender: TObject);
var
cValor   : Double;
cResiduo : Double;
i        : Integer;
begin

//-- Zera a variavel
cValor:= 0;

//-- Limpa o Memo
Memo.Clear;

for i:= 1 to StrToInt(dtParcela.Text) do //Loop de parcelas q serão geradas
begin

//-- Verifica se é a ultima parcela
if i = StrToInt(dtParcela.Text) then
   begin
   //-- Formata e divide o valor
   //-- Pela quantidade de parcelas
   cValor:= StrToFloat(FormatFloat('########0.00',(StrToFloat(dtValor.Text) / StrToFloat(dtParcela.Text))));

   //-- Multiplica o valor pela qt parcelas
   cValor:= cValor * StrToFloat(dtParcela.Text);

   //-- Lota a varivel com residuo
   //-- no caso de 100 / 3 a divisão retorna 33,33
   //-- e 33,33 * 3 = 99,99
   //-- Então o residuo sera de 100 - 99,99
   //-- Que é igual a 0,01
   cResiduo:= StrToFloat(dtValor.Text) - cValor;


   //-- Então dividimos os 100 por 3
   //-- que é igual 33,33
   //-- a adicionamos o nosso residuo
   //-- ficando 33,33 + 0,01 = 33,34
   cValor  := (StrToFloat(dtValor.Text) / StrToFloat(dtParcela.Text)) + cResiduo;
   end else
       cValor:= (StrToFloat(dtValor.Text) / StrToFloat(dtParcela.Text));

//--- Formata o valor
cValor:= StrToFloat(FormatCurr('########0.00',cValor));
Memo.Lines.Add(IntToStr(i)+'º Parcela   -   Valor: R$ '+FloatToStr(cValor));
end;

Memo.Lines.Add('------------------------------------------------');
Memo.Lines.Add('Total = '+FormatFloat('R$ ###,###,##0.00',StrToFloat(dtValor.Text)));
end;

Os fontes do exemplo que fiz estão no link abaixo

 

<- Link ->

 

Abraços e boa sorte!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Ola.. precido montar um algoritmo que trate o problema do ultimo centavo que falta quando gero as parcelas no contas a pagar. Por exemplo uma conta 100,00 / 3 = 33,33 e falta o ultimo centavo e eu queria colocar a ultima parcela com 33,34 ma nao tenho nem ideia de como fazer. Alguem pode me ajudar?

 

Amigo

Fiz um pequeno exemplo para você

segue o código abaixo, qualquer duvida é só postar

 

procedure TForm1.btGerarClick(Sender: TObject);
var
cValor   : Double;
cResiduo : Double;
i        : Integer;
begin

//-- Zera a variavel
cValor:= 0;

//-- Limpa o Memo
Memo.Clear;

for i:= 1 to StrToInt(dtParcela.Text) do //Loop de parcelas q serão geradas
begin

//-- Verifica se é a ultima parcela
if i = StrToInt(dtParcela.Text) then
   begin
   //-- Formata e divide o valor
   //-- Pela quantidade de parcelas
   cValor:= StrToFloat(FormatFloat('########0.00',(StrToFloat(dtValor.Text) / StrToFloat(dtParcela.Text))));

   //-- Multiplica o valor pela qt parcelas
   cValor:= cValor * StrToFloat(dtParcela.Text);

   //-- Lota a varivel com residuo
   //-- no caso de 100 / 3 a divisão retorna 33,33
   //-- e 33,33 * 3 = 99,99
   //-- Então o residuo sera de 100 - 99,99
   //-- Que é igual a 0,01
   cResiduo:= StrToFloat(dtValor.Text) - cValor;


   //-- Então dividimos os 100 por 3
   //-- que é igual 33,33
   //-- a adicionamos o nosso residuo
   //-- ficando 33,33 + 0,01 = 33,34
   cValor  := (StrToFloat(dtValor.Text) / StrToFloat(dtParcela.Text)) + cResiduo;
   end else
       cValor:= (StrToFloat(dtValor.Text) / StrToFloat(dtParcela.Text));

//--- Formata o valor
cValor:= StrToFloat(FormatCurr('########0.00',cValor));
Memo.Lines.Add(IntToStr(i)+'º Parcela   -   Valor: R$ '+FloatToStr(cValor));
end;

Memo.Lines.Add('------------------------------------------------');
Memo.Lines.Add('Total = '+FormatFloat('R$ ###,###,##0.00',StrToFloat(dtValor.Text)));
end;

Os fontes do exemplo que fiz estão no link abaixo

 

<- Link ->

 

Abraços e boa sorte!!

 

Muito obrigado Geovane, vlw pela ajuda, foi de muita ajuda seu codigo...Depois de muitas tentativas funcionou corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado Geovane, vlw pela ajuda, foi de muita ajuda seu codigo...Depois de muitas tentativas funcionou corretamente.

 

Por nada amigo, precisando é só postar e se tiver ao meu alcance sempre vou ajudar..

 

Abraços!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Geovane.

 

Sua rotina esta muito boa, mas em alguns casos ela não funciona.

 

por exemplo: Gerar 2 parcelas de um total de 290,55

 

O resultado fica:

 

1º Parcela - Valor: R$ 145,28

2º Parcela - Valor: R$ 145,26

------------------------------------------------

Total = R$ 290,55

 

outro exemplo é calcular 2 parcelas de 290,53 que acaba saindo:

 

1º Parcela - Valor: R$ 145,26

2º Parcela - Valor: R$ 145,26

------------------------------------------------

Total = R$ 290,53

 

Repare que na segunda parcela falta 1 centavo para fechar. Caso saiba como resolver deixa a dica pra gente.

 

abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Modifiquei um pouco o codigo e consegui fazer funcionar.

 

procedure TForm1.Button1Click(Sender: TObject);
var
SubParc, Sobra, cValor   : Double;
i        : Integer;
begin
//-- Zera a variavel
cValor:= 0;
//-- Limpa o Memo
Memo.Clear;

for i:= 1 to StrToInt(dtParcela.Text) do
begin
if i = StrToInt(dtParcela.Text) then
  begin
  SubParc:= StrToFloat(dtParcela.Text) - 1;  //pega o total de parcelas e tira uma
  Sobra:= cValor * SubParc;   //Pega o valor da penultina parcela e multiplica pelo total de parcelas menos 1
  cValor:= StrToFloat(dtValor.Text) - Sobra;  //calcula o valor da ultima parcela

  end else
      cValor:= (StrToFloat(dtValor.Text) / StrToFloat(dtParcela.Text));

//--- Formata o valor
cValor:= StrToFloat(FormatCurr('########0.00',cValor));
Memo.Lines.Add(IntToStr(i)+'º Parcela   -   Valor: R$ '+FloatToStr(cValor));
end;
  Memo.Lines.Add('------------------------------------------------');
  Memo.Lines.Add('Total = '+FormatFloat('R$ ###,###,##0.00',StrToFloat(dtValor.Text)));
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.