Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-01-2014
negrokau negrokau is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 210
Poder: 9
negrokau Va por buen camino
Talking Como convertir hora a tipo numeric?

Hola amigos, tengo un inconveniente en un calculo, ya busque mucho en el foro pero no estoy encontrando una solucion, o por lo menos no lo estoy entendiendo lo que ya encontre...

Mi inconveniente es que necesito calcular la diferencia entre hora de entrada y hora de salida de un estacionamiento, el resultado de horas utilizadas tengo que calcularlo por un TARIFA establecido...

Este es mi codigo:

Boton1
Establece la hora de entrada

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
DATAMODULE1.Q_PRUEBA.Open;
DATAMODULE1.Q_PRUEBA.Append;
DATAMODULE1.Q_PRUEBA.FieldValues['COD_PRUEBA']:=1;
DATAMODULE1.Q_PRUEBA.FieldValues['HORA1']:=TIME;//hora de entrada
end;

Boton2
Establece
-La hora de Salida
-Calcula la diferencia de (hora de salida - hora de entrada)
-Multiplica la cantidad de horas utilizadas con la TARIFA establecida

Código Delphi [-]
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
DATAMODULE1.Q_PRUEBA.FieldValues['HORA2']:=TIME;//hora de salida
DATAMODULE1.Q_PRUEBA.FieldValues['T_HORA']:=DATAMODULE1.Q_PRUEBA.FieldValues['HORA2']-DATAMODULE1.Q_PRUEBA.FieldValues['HORA1'];//total de horas
DATAMODULE1.Q_PRUEBA.FieldValues['MONTO']:=DATAMODULE1.Q_PRUEBA.FieldValues['T_HORA']*DATAMODULE1.Q_PRUEBA.FieldValues['TARIFA'];//total de horas * TARIFA
end;

Los Campos HORA1, HORA2 Y T_HORA son tipo TIME
Los campos MONTO y TARIFA son tipo NUMERIC

Como multiplicar un dato tipo TIME con un NUMERIC?

Ojala lo hayan entendido, le agradezco desde ya... que pasen un buen dia... gracias...
Responder Con Cita
  #2  
Antiguo 08-01-2014
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 295
Poder: 9
Caminante Va camino a la fama
Podrías calcular la diferencia de horas con la función HoursBetween que devuelve un entero y así multiplicarlo con el monto por hora.
Aunque cuando resto fechas de la forma que lo haces siempre me devuelve un entero.

Saludos
Responder Con Cita
  #3  
Antiguo 08-01-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 29.133
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Deberías guardar la hora de entrada y la de salida en tipo "datetime", ahora llamado "timestamp". Aunque sólamente presentes la hora al usuario.

Así que:
Código Delphi [-]
 importe = preciohora * HoursBetween( fechahorasalida, fechahoraentrada )
Responder Con Cita
  #4  
Antiguo 08-01-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.198
Poder: 31
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola negrokau.
Cita:
Empezado por negrokau Ver Mensaje
...
Como multiplicar un dato tipo TIME con un NUMERIC?
Respondiendo a esa consulta, la ayuda de Delphi dice:
Cita:
Delphi stores date and time values in the TDateTime type. The integral part of a TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of a TDateTime value is fraction of a 24 hour day that has elapsed.
Atendiendo a lo anterior, podemos hacer por ejemplo:
Código Delphi [-]
function HourValue(const Entrada, Salida: TDateTime; const Valor: Double): Double;
begin
  Result :=  Frac(Salida - Entrada) * 24 * Valor;
end;

Y luego usar la función de este modo:
Código Delphi [-]
  with DATAMODULE1.Q_PRUEBA do
    FieldValues['MONTO'] := HourValue(FieldValues['HORA1'], FieldValues['HORA2'], PRUEBA.FieldValues['TARIFA']);

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
No se puede convertir variable de tipo null a tipo integer. JairoC Varios 5 30-11-2011 15:43:11
como insertar la hora del sistema en un campo de tipo interval pnsd_89 Oracle 2 31-10-2007 18:18:27
Convertir de hora GMT a hora local marceloalegre Varios 4 16-05-2007 23:35:58
¿Como convertir de texto a tipo fecha en firebird? Nelly SQL 5 22-02-2007 17:54:14
Duda con tipo decimal o numeric jwmoreira Firebird e Interbase 3 19-08-2004 11:20:33


La franja horaria es GMT +2. Ahora son las 18:54:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi