Fórum Multa como Calcular #261619
12/12/2004
0
Tenho o seguinte problema:
fiz um emprestimo de um livro no dia 10/12/2004 e a data de entrega desse livro seria 17/12/2004 se passar desse dia sera cobrado multa de 2¬ ao dia, gostaria de saber como fazer isso.
Obrigado.
Spooner
Curtir tópico
+ 0Posts
13/12/2004
Maxadens
[b:fa69bbedda]function DifDias(DataDev:TDateTime; Hoje:TDateTime): integer;
Var Data: TDateTime;
dia, mes, ano: Word;
Dias: String;
begin
if Hoje < DataDev then begin
Result := 0;
end else begin
Data := Hoje - DataDev;
DecodeDate( Data, ano, mes, dia);
Dias := FloatToStr(Data);
Result := Trunc(StrToFloat(dias));
end;
end;[/b:fa69bbedda]
Com a função declarada vc faz o seguinte:
[b:fa69bbedda]var dias: integer;
Valor: currency;
begin
dias := Diasdifdias(DataDevolução, date) //Data devolução seria 17/12/2004
Valor := Valor * (0,02 * dias) //aqui seria o calculo de juros
.
.
.[/b:fa69bbedda]
Algumas adaptações serão necessárias e tem que ver se o juro é acumulativo ou não.
Espero ter ajudado
Gostei + 0
13/12/2004
Spooner
procedure TForm1.Button1Click(Sender: TObject); var dias: integer; Valor: currency; begin dias := DifDias(10/12/2004, date); ShowMessage(IntToStr(dias)); Valor := (0.15 * dias); //aqui seria o calculo de juros ShowMessage(FloatToStr(valor)); end; function TForm1.DifDias(DataDev:TDateTime; Hoje:TDateTime): integer; var Data: TDateTime; dia, mes, ano: Word; Dias: String; begin if Hoje < DataDev then begin Result := 0; end else begin Data := Hoje - DataDev; DecodeDate( Data, ano, mes, dia); Dias := FloatToStr(Data); Result := Trunc(StrToFloat(dias)); end; end;
Estou usando o codigo acima mas a diferença de datas esta vindo como 38333 mas o certo ceria:
Data atual: 13/12/2004 - Data Devolução: 10/12/2004
então a diferença seria 3 dias cada dia e cobrado 0.15 centavos então daria 0.45
Gostei + 0
13/12/2004
Rômulo Barros
Uses DateUtils; ... Var TotalDias : Integer; Begin TotalDias := DaysBetween(DataDeEntrega,DataAtual) ; If(TotalDias > 0)Then Begin Showmessage(´Total de Dias Atrasados: ´ + IntToStr(TotalDias) + Chr(10) + ´Valor a ser pago a mais : ´ + FloatToStr(0.15 * TotalDias)); End; End;
[u:3c6e320f49][i:3c6e320f49][b:3c6e320f49]Obs: [/i:3c6e320f49][/u:3c6e320f49]A função DaysBeteween retorna o número de dias entre duas datas;[/b:3c6e320f49]
Gostei + 0
13/12/2004
Spooner
Se eu colocar desta forma ele me retorna o seguinte valor:
TotalDias := DaysBetween(10/12/2004, date) ;
Valor:
Dias atrasado: 38333
Desta outra forma:
TotalDias := DaysBetween(10122004, date) ;
Retorno:
Dias atrasado: 10083670
O que eu queria que informasse a data desta forma:
TotalDias := DaysBetween(10/12/2004, date) ;
E me retornasse a diferenca de 3 dias.
Muito Obrigado pela resposta, espero que possa me ajudar.
Gostei + 0
13/12/2004
Spooner
Consegui fazer do jeito que queria apenas fiz essa alteração:
TotalDias := DaysBetween(StrToDate(´10/11/2004´), date) ;
Obrigado Undeclared Identifier por ter postado, e obrigado MaxAdens por tentar ajuda. :wink: :lol:
Gostei + 0
14/12/2004
Rômulo Barros
TotalDias := DaysBetween(StrToDate(´10/11/2004´), date) ;
Gostei + 0