Calculo de Horas

Delphi

16/04/2009

Pessol tenho um dúvida com relação a horas, para fazer os calculos utilizo no banco de dados (firebird 2.1) o tipo date ou string?

Tem como eu fazer assim?
Valor da hora = 30,00
Total de horas = 2:15
Valor Total = 67,50.

Como eu faço para a hora 2:15 (time) se tornar 2,25 (float), com isso consigo fazer o calculo tranquilo.
30,00 x 2,25 = 67,50.

Alguem me ajuda?


Betofrasson

Betofrasson

Curtidas 0

Respostas

Lehapan

Lehapan

16/04/2009

Caro betofrasson,

segue abaixo o código que pode te ajudar.

{ Converte a hora para HORA-60 ou HORA-100, de acordo com o parâmetro }
function ConvHoras(intHora, intBase: integer): integer;
var
  strHora: string;
  siHr, siMin: smallint;
begin
  {Considera que ´intHora´ tera o formato ´hhmm´.
     ´intBase´ = 100 - converte para hora CENTESIMAL
     ´intBase´ = 60  - converte para hora SEXAGESIMAL }
  strHora := ColocaZero( intHora, 8 );
  siHr  := StrToInt( Copy(strHora, 1, 6) );
  siMin := StrToInt( Copy(strHora, 7, 2) );

  if  intBase = 100 then
      siMin := Trunc( RoundTo(siMin * 1.6667, 0) )
  else
      siMin := Trunc( RoundTo(siMin / 1.6667, 0) )
  ;

  Result := StrToInt( ColocaZero(siHr, 6) + ColocaZero(siMin, 2) );
end;

function ColocaZero(iValor, intTam: integer): string;
var
  strValor: string;
begin
  strValor := Trim( IntToStr(intValor) );
  strValor := PreencheInicio( strValor, intTam, ´0´ );

  Result := strValor;
end;

function PreencheInicio(strString: String; intQtde: Integer; C: Char): string;
var
  x: integer;
  StrAux: string;
begin
  if  Length(strString) > intQtde then
      Result := Copy( strString, (Length(strString)-intQtde) + 1 , Length(strString) )
  else
    begin
      StrAux := ´´;
      for x:= Length(strString) to intQtde - 1 do
      begin
        StrAux := StrAux + C;
      end;
      Result := StrAux + strString;
    end
  ;
end;


espero ter ajudado.


GOSTEI 0
Betofrasson

Betofrasson

16/04/2009

lehapan.. vim acabar de dizer que já consegui um calculo para isso..
mas muito obrigado mesmo pela atenção..

pode ser que ajude mais alguém, segue o código:
function ValorHora( ValorHora: Double; TotalHora: TDateTime ): Double; 
var 
   fHora, fMinuto: TDateTime; 
   fValorHora, fValorMinuto, ValorTotal: Double; 
begin 
   fHora := StrToFloatDef( FormatDateTime( ´hh´, TotalHora ), 0 ); 
   fMinuto := StrToFloatDef( FormatDateTime( ´mm´, TotalHora ), 0 ); 
   fValorHora := ValorHora*fHora; 
   fValorMinuto := (ValorHora/60)*fMinuto; 
   ValorTotal := fValorHora + fValorMinuto; 
   Result := ValorTotal; 
end; 


falow..


GOSTEI 0
Marco Salles

Marco Salles

16/04/2009

Não seria so isto ???????

var
Ht:TTime;
begin
 Ht:=StrtoTime(´02:15:00´);
 Showmessage(FloattoStr(30*24*Ht));
end;


Vai dar os mesmo 67,50.


GOSTEI 0
POSTAR