GARANTIR DESCONTO

Fórum Multiplicar tempo por dinheiro #364359

27/09/2008

0

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. :(


Abelha

Abelha

Responder

Posts

27/09/2008

Abelha

Um exemplo:
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)?


Responder

Gostei + 0

27/09/2008

Campsoft

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.


Responder

Gostei + 0

28/09/2008

Abelha

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.


Responder

Gostei + 0

30/09/2008

Pestana_

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!


Responder

Gostei + 0

30/09/2008

Abelha

Só multipliquei o resutado por 24:

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ê....


Responder

Gostei + 0

30/09/2008

Pestana_

Só multipliquei o resutado por 24:
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ê....


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!


Responder

Gostei + 0

30/09/2008

Pestana_

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!


Responder

Gostei + 0

30/09/2008

Campsoft

Existem N formas de se fazer isso... eu acho mais tranquilo fazer assim:

//  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 !


Responder

Gostei + 0

30/09/2008

Campsoft

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.


Responder

Gostei + 0

30/09/2008

Pestana_

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:

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;



Responder

Gostei + 0

30/09/2008

Pestana_

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!


Responder

Gostei + 0

30/09/2008

Pestana_

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;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar