Para Amigos que entende!! (Data,Horas e Minuto X Valor R$ )
[b:873b4a619d]procedure TForm1.Button1Click(Sender: TObject);
VAR
DTE, DTS, DTT: TDATE;
HRE,HRS,HRT: TTIME;
VLHR,HRSEG,HRMIN,HRPG: REAL;
BEGIN
DTE:=STRTODATE(mskedDataEntrada.Text);
DTS:=STRTODATE(mskedDataSaida.Text);
HRE:=STRTOTIME(mskedHoraEntrada.Text);
HRS:=STRTOTIME(mskedHoraSaida.Text);
VLHR:=STRTOFLOAT(edValoHora.Text);
IF DTE > DTS THEN
BEGIN
MESSAGEDLG(´A data de entrada não pode ser maior que a data de saída!´,mterror,[mbok],0);
EXIT;
END;
IF DTE = DTS THEN
IF HRE > HRS THEN
BEGIN
MESSAGEDLG(´A hora de entrada não pode ser maior que a hora de saída!´,mterror,[mbok],0);
EXIT;
END
ELSE
HRT := HRS - HRE;
IF DTE < DTS THEN
BEGIN
DTT := DTS - DTE;
HRT := (STRTOTIME(´23:59:59´)-HRE)+HRS;
END;
HRSEG := STRTOINT(COPY(TIMETOSTR(HRT),7,2));
HRMIN := STRTOINT(COPY(TIMETOSTR(HRT),4,2));
HRPG := STRTOINT(COPY(TIMETOSTR(HRT),1,2));
IF (HRSEG <> 0) OR (HRMIN <> 0) THEN
HRPG := HRPG+1;
IF DTT >= 1 THEN
IF HRE < HRS THEN
BEGIN
lblHoras.Caption := FLOATTOSTR(DTT)+´ Dia(s) e ´+TIMETOSTR(HRT)+´ hora(s)´;
lblHoraPaga.Caption := FLOATTOSTR(((DTT*24)*VLHR)+(HRPG*VLHR))+´ reais´;
END
ELSE
BEGIN
lblHoras.Caption := FLOATTOSTR(DTT-1)+´ Dia(s) e ´+TIMETOSTR(HRT)+´ hora(s)´;
lblHoraPaga.Caption := FLOATTOSTR((((DTT-1)*24)*VLHR)+(HRPG*VLHR))+´ reais´;
END
ELSE
BEGIN
lblHoras.Caption := TIMETOSTR(HRT)+´ hora(s)´;
lblHoraPaga.Caption := FLOATTOSTR(HRPG*VLHR)+´ reais´;
END;
END;
Esta função acima calcular o intervalo entre (Duas Data) e (Duas Horas).....com resultado do intervalo entre as (Datas e Horas ) e multiplicado pôr um Valor Fixo.......
Exemplo ........................
mskedDataEntrada.Text = 22/08/2003
mskedDataSaida.Text = 22/08/2003
mskedHoraEntrada.Text = 10:00
mskedHoraSaida.Text = 11:30
edValoHora.Text = 5,00
Digitando estes valores acima o Resultado da (Hora) esta correto .......mas o resultado a (Pagar) em “Reais&8221; da um Error pois arredonda os Minutos para Hora..............Veja como fica
1: 30 horas
10 reais
...........Como que eu faço para calcular os Minutos também ?? Quero que os resultado ficassem assim............
1:30 horas
7,50 reais [/b:873b4a619d]
VAR
DTE, DTS, DTT: TDATE;
HRE,HRS,HRT: TTIME;
VLHR,HRSEG,HRMIN,HRPG: REAL;
BEGIN
DTE:=STRTODATE(mskedDataEntrada.Text);
DTS:=STRTODATE(mskedDataSaida.Text);
HRE:=STRTOTIME(mskedHoraEntrada.Text);
HRS:=STRTOTIME(mskedHoraSaida.Text);
VLHR:=STRTOFLOAT(edValoHora.Text);
IF DTE > DTS THEN
BEGIN
MESSAGEDLG(´A data de entrada não pode ser maior que a data de saída!´,mterror,[mbok],0);
EXIT;
END;
IF DTE = DTS THEN
IF HRE > HRS THEN
BEGIN
MESSAGEDLG(´A hora de entrada não pode ser maior que a hora de saída!´,mterror,[mbok],0);
EXIT;
END
ELSE
HRT := HRS - HRE;
IF DTE < DTS THEN
BEGIN
DTT := DTS - DTE;
HRT := (STRTOTIME(´23:59:59´)-HRE)+HRS;
END;
HRSEG := STRTOINT(COPY(TIMETOSTR(HRT),7,2));
HRMIN := STRTOINT(COPY(TIMETOSTR(HRT),4,2));
HRPG := STRTOINT(COPY(TIMETOSTR(HRT),1,2));
IF (HRSEG <> 0) OR (HRMIN <> 0) THEN
HRPG := HRPG+1;
IF DTT >= 1 THEN
IF HRE < HRS THEN
BEGIN
lblHoras.Caption := FLOATTOSTR(DTT)+´ Dia(s) e ´+TIMETOSTR(HRT)+´ hora(s)´;
lblHoraPaga.Caption := FLOATTOSTR(((DTT*24)*VLHR)+(HRPG*VLHR))+´ reais´;
END
ELSE
BEGIN
lblHoras.Caption := FLOATTOSTR(DTT-1)+´ Dia(s) e ´+TIMETOSTR(HRT)+´ hora(s)´;
lblHoraPaga.Caption := FLOATTOSTR((((DTT-1)*24)*VLHR)+(HRPG*VLHR))+´ reais´;
END
ELSE
BEGIN
lblHoras.Caption := TIMETOSTR(HRT)+´ hora(s)´;
lblHoraPaga.Caption := FLOATTOSTR(HRPG*VLHR)+´ reais´;
END;
END;
Esta função acima calcular o intervalo entre (Duas Data) e (Duas Horas).....com resultado do intervalo entre as (Datas e Horas ) e multiplicado pôr um Valor Fixo.......
Exemplo ........................
mskedDataEntrada.Text = 22/08/2003
mskedDataSaida.Text = 22/08/2003
mskedHoraEntrada.Text = 10:00
mskedHoraSaida.Text = 11:30
edValoHora.Text = 5,00
Digitando estes valores acima o Resultado da (Hora) esta correto .......mas o resultado a (Pagar) em “Reais&8221; da um Error pois arredonda os Minutos para Hora..............Veja como fica
1: 30 horas
10 reais
...........Como que eu faço para calcular os Minutos também ?? Quero que os resultado ficassem assim............
1:30 horas
7,50 reais [/b:873b4a619d]
Jairo-go
Curtidas 0
Respostas
Vinicius2k
24/08/2003
Jairo,
Quando vc trabalha com hrs deve transformar sempre para a menor unidade... no seu caso minutos...
ex : vc paga R$ 5 por hora então são 0,8333333... por minuto... (dividi 5 por 60)
vc transforma cada hora em minutos, multiplicando por 60... depois pega os minutos...
no seu caso 1:30 minutos são 60 min + 30 minutos = 90 min * 0,8333333333 = R$ 7,50...
a mesma regra se aplicaria se vc trabalhasse com segundos soh q a sua unidade seria ainda menor e a conversão seria assim :
supondo 1:30:28s
R$ = 0,0013888888 por segundo
1 hora * 3600 segundos = 3600 segundos
30 min * 60 segundos = 1800 segundos
28 seg * 1 segundo = 28 segundos
total : 5.428 segs * 0,0013888888 = 7,5388 = R$ 7,54
Quando vc trabalha com hrs deve transformar sempre para a menor unidade... no seu caso minutos...
ex : vc paga R$ 5 por hora então são 0,8333333... por minuto... (dividi 5 por 60)
vc transforma cada hora em minutos, multiplicando por 60... depois pega os minutos...
no seu caso 1:30 minutos são 60 min + 30 minutos = 90 min * 0,8333333333 = R$ 7,50...
a mesma regra se aplicaria se vc trabalhasse com segundos soh q a sua unidade seria ainda menor e a conversão seria assim :
supondo 1:30:28s
R$ = 0,0013888888 por segundo
1 hora * 3600 segundos = 3600 segundos
30 min * 60 segundos = 1800 segundos
28 seg * 1 segundo = 28 segundos
total : 5.428 segs * 0,0013888888 = 7,5388 = R$ 7,54
GOSTEI 0