Multiplicar tempo por dinheiro
Como faço pra multiplicar o valor de uma variavel TTime ou TdateTime por um valor real? Por Exemplo:
R$25,50*2:30h
esse valor deveria dar como resultado=R$63,75
mas como estou fazendo dá um valor que naum tem nada a ver. :(
R$25,50*2:30h
esse valor deveria dar como resultado=R$63,75
mas como estou fazendo dá um valor que naum tem nada a ver. :(
Abelha
Curtidas 0
Respostas
Abelha
27/09/2008
Um exemplo:
Onde está o(s) erro(s)?
procedure TForm1.Button1Click(Sender: TObject); var Tempo:Ttime; dinheiro, resultado:double; begin Tempo:=StrTotime(´2:50´); dinheiro:=StrToFloat(´25,50´); resultado:=tempo*dinheiro; showmessage(´R$ ´+Formatfloat(´#0,00´,resultado)); end;
Onde está o(s) erro(s)?
GOSTEI 0
Campsoft
27/09/2008
trocando em minutos....
digamos que seu minuto vale 0,425
2h 30m = 150 minutos
multiplicando o valor do minuto por minutos.. teriamos:
0,425 * 150 = 63,75
espero ter ajudado.
digamos que seu minuto vale 0,425
2h 30m = 150 minutos
multiplicando o valor do minuto por minutos.. teriamos:
0,425 * 150 = 63,75
espero ter ajudado.
GOSTEI 0
Abelha
27/09/2008
O que eu percebi é que como eu estava fazendo o resultado dava o valor do dia e não da hora. Pra calcular a hora, então, era só multiplicar esse valor por 24.
valeu.
valeu.
GOSTEI 0
Pestana_
27/09/2008
O que eu percebi é que como eu estava fazendo o resultado dava o valor do dia e não da hora. Pra calcular a hora, então, era só multiplicar esse valor por 24.
valeu.
bom dia Abelha!
parece que você fez de uma forma diferente, como é que você fez? qual foi a formula?
Abraços!
GOSTEI 0
Abelha
27/09/2008
Só multipliquei o resutado por 24:
qualquer dúvida, fala aê....
procedure TForm1.Button1Click(Sender: TObject); var Tempo:Ttime; dinheiro, resultado:double; begin Tempo:=StrTotime(´2:50´); dinheiro:=StrToFloat(´25,50´); resultado:=tempo*dinheiro*24; //Aqui, multiplica por 24 showmessage(´R$ ´+Formatfloat(´#,0.00´,resultado)); end;
qualquer dúvida, fala aê....
GOSTEI 0
Pestana_
27/09/2008
Só multipliquei o resutado por 24:
qualquer dúvida, fala aê....
procedure TForm1.Button1Click(Sender: TObject); var Tempo:Ttime; dinheiro, resultado:double; begin Tempo:=StrTotime(´2:50´); dinheiro:=StrToFloat(´25,50´); resultado:=tempo*dinheiro*24; //Aqui, multiplica por 24 showmessage(´R$ ´+Formatfloat(´#,0.00´,resultado)); end;
muito bem Abelha! desta forma também resolve.
agora se você for trabalhar com acumulo de horas (por ex.: 244:00) então ocorrerá uma exceção quando você for converter para Time.
Abraços!
GOSTEI 0
Pestana_
27/09/2008
trocando em minutos....
digamos que seu minuto vale 0,425
2h 30m = 150 minutos
multiplicando o valor do minuto por minutos.. teriamos:
0,425 * 150 = 63,75
espero ter ajudado.
como é que você descrobre o total de minutos nesta linha abaixo:
2h 30m = 150 minutos
estou tentando intender, mas não estou conseguindo fazer!
Abraços!
GOSTEI 0
Campsoft
27/09/2008
Existem N formas de se fazer isso... eu acho mais tranquilo fazer assim:
abraços !
// hora (formato HH:MM) para minutos Function Hora2Min(Hora: String): Integer; begin Result := (StrToInt(Copy(Hora,1,2))*60) + StrToInt(Copy(Hora,4,2)); end;
abraços !
GOSTEI 0
Campsoft
27/09/2008
Lógico, se você pensar em 500:30 você pode usar usar os dois pontos ´:´ como referencia, multiplicar oque existe dos pontos para a esquerda por 60 e soma com os digitos da direita.
É só dar uma alterada na função.
É só dar uma alterada na função.
GOSTEI 0
Pestana_
27/09/2008
Ola campsoft!
a sua dica funciona perfeito, mas antes de você postar eu havia conseguido de uma outra forma. É como você já havia dito que existe várias formas de se fazer e consegui fazer desta forma abaixo:
a sua dica funciona perfeito, mas antes de você postar eu havia conseguido de uma outra forma. É como você já havia dito que existe várias formas de se fazer e consegui fazer desta forma abaixo:
procedure TForm1.Button1Click(Sender: TObject); var valorPago, totalHoras, totalMinutos : double; begin valorPago := 10.50/60; // valor pago por minuto. totalHoras := 244.30; // total de horas trabalhado. totalMinutos := (Trunc(totalHoras)*60) + Frac(totalHoras); // total de minutos trabalhado. ShowMessage(FloatToStr(RoundTo(valorPago*totalMinutos,-2))); end;
GOSTEI 0
Pestana_
27/09/2008
eu já havia me esquecendo, para utilizar a função [b:1d8f28798e]Frac[/b:1d8f28798e] é necessario declarar no uses a unit [b:1d8f28798e]Math[/b:1d8f28798e].
Abraços!
Abraços!
GOSTEI 0
Pestana_
27/09/2008
por exemplo: caso você deseja que o usuário adicione as Horas no componente edit, então você pode utilizar o stringReplace para trocar os dois pontos ( : ) por ponto ( . ) e depois converter Horas (total de horas trabalhada) em Número Fracionário da seguinte forma:
procedure TForm1.Button1Click(Sender: TObject); var valorPago, totalHoras, totalMinutos : double; begin valorPago := 10.50/60; // valor pago por minuto. // total de horas trabalhado. totalHoras := StrToCurr(StringReplace(Trim(mskQtdeHora.Text), ´:´, ´.´, [])); // total de minutos trabalhado. totalMinutos := (Trunc(totalHoras)*60) + Frac(totalHoras); ShowMessage(FloatToStr(RoundTo(valorPago*totalMinutos,-2))); end;
GOSTEI 0