Popin 0 Denunciar post Postado Maio 28, 2010 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
Geovane Velmer 0 Denunciar post Postado Maio 28, 2010 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
Popin 0 Denunciar post Postado Maio 30, 2010 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
Geovane Velmer 0 Denunciar post Postado Maio 31, 2010 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
Popin 0 Denunciar post Postado Maio 31, 2010 Cara Vou postar um topico sobre relatorios,se puder ajudar eu agradeço Compartilhar este post Link para o post Compartilhar em outros sites
Geovane Velmer 0 Denunciar post Postado Junho 14, 2010 Cara Vou postar um topico sobre relatorios,se puder ajudar eu agradeço Ok, Estou aqui para isso.. Compartilhar este post Link para o post Compartilhar em outros sites
Renanbg 1 Denunciar post Postado Janeiro 13, 2011 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
Renanbg 1 Denunciar post Postado Janeiro 14, 2011 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