Fórum Conversão #316115
14/03/2006
0
var
valorHora:Currency;
TempoUsado:TTime;
ValorCobrado:real;
...
valorHora:=strtofloat(edit1.text);
TempoUsado:=strtoTime(edit2.text);
ValorcOBRADO:=ValorHora*(TempoUsado*24);
edit3.Text:=formatFloat(´0.00´,valorCobrado);
end;
Isso converte horas usadas em um valor a ser cobrado,.
Funciona bem mas se as horas de uso ultrapassa a 24:00,
gera um erro de conversão.
Como faço para contornar isso?Não uso como horário de relógio,
preciso usar como contador de tempo,tipo,10:00 horas de uso,50:00 horas de uso etc...
Kroki
Curtir tópico
+ 0Posts
15/03/2006
Paullsoftware
Essa procedure calcula quanto tempo o cara vai usar informando apenas o valor cobrado pela hora e o valor que ele pretende gastar.
procedure CalcValorDaHora(ValorDaHora,ValorPago:String); var valor_pago,valor_hora:Double; horas,minutos : integer; begin valor_pago := StrToFloat(ValorPago); valor_hora := StrToFloat(ValorDaHora); horas := Trunc(valor_pago/valor_hora); minutos := round(((valor_pago/valor_hora) - Trunc(valor_pago/valor_hora)) * 60); vRetornaHora := StrToTime(inttostr(horas) + ´:´ + inttostr(minutos));// a variável vRetornaHora assume o tempo calculado... end;
agora se vc pretende informar o tempo que ele vai passar e não o valor eu tb tenho essa opção no meu sistema e faço assim:
primeiro converto o tempo informado em minutos para facilitar o calculo:
Function HoraParaMinuto(Hora: String): Integer; begin Result := (StrToInt(Copy(Hora,1,2))*60) + StrToInt(Copy(Hora,4,2)); end;
depois é só fazer assim
var wTempo,wValor:Double; .... begin wUsado := HoraParaMinuto(EditTempo.Text); wValor := ( ( vValorDaHora * wUsado ) / 60 ); .... end;
espero ter ajudado! :wink:
Gostei + 0
15/03/2006
Kroki
Adfaptei sua dica aonde precisava para valores de 1:00,10:00 e 100:00.
Function HoraParaMinuto(Hora: String): Integer;
begin
If Length(Hora) = 4 then Result :=(StrToInt(Copy(Hora,1,1))*60) + StrToInt(Copy(Hora,3,2));
If Length(Hora) = 5 then Result :=(StrToInt(Copy(Hora,1,2))*60) + StrToInt(Copy(Hora,4,2));
If Length(Hora) = 6 then Result :=(StrToInt(Copy(Hora,1,3))*60) + StrToInt(Copy(Hora,5,2));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
wUsado,wValor:Double;
begin
wUsado :=HoraParaMinuto (Edit1.Text);
wValor := ( ( 2.0 * wUsado ) / 60 );
Label1.Caption:=formatFloat(´0.00´,wValor);
end;
Gostei + 0
15/03/2006
Kroki
Adfaptei sua dica aonde precisava para valores de 1:00,10:00 e 100:00.
Function HoraParaMinuto(Hora: String): Integer;
begin
If Length(Hora) = 4 then Result :=(StrToInt(Copy(Hora,1,1))*60) + StrToInt(Copy(Hora,3,2));
If Length(Hora) = 5 then Result :=(StrToInt(Copy(Hora,1,2))*60) + StrToInt(Copy(Hora,4,2));
If Length(Hora) = 6 then Result :=(StrToInt(Copy(Hora,1,3))*60) + StrToInt(Copy(Hora,5,2));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
wUsado,wValor:Double;
begin
wUsado :=HoraParaMinuto (Edit1.Text);
wValor := ( ( 2.0 * wUsado ) / 60 );
Label1.Caption:=formatFloat(´0.00´,wValor);
end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)