Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Calculo de tiempos (https://www.clubdelphi.com/foros/showthread.php?t=70633)

jafera 02-11-2010 11:03:28

Calculo de tiempos
 
Hola a todos.

Tengo una duda con el codigo siguiente que me genera un error de x is not a valid integer value en las lineas que estan marcadas en rojo.

Lo que quiero hacer con este codigo es sacar a partir de un tiempo inicial, el de MaskEdit2.Text (ej. 03:25:45) un porcentaje de tiempo del cual pongo el valor (ej. 12) en JVvalidateEdit2 y desde aqui sacar este valor en tiempo (MaskEdit3.text) y el valor inicial + el porcentaje en Maskedit4.text.

El problema viene en la asignacion del valor a las variables Hores, Minuts i Segons.

Código Delphi [-]
 
procedure TF_Calculadora.JvXPButton2Click(Sender: TObject);
var
H: Ttime;
Hora, Minuto, Segundo, Msec: Word;
J,K : Double;
Hores, Minuts, Segons: Integer;
begin
        H:=StrToTime(MaskEdit2.Text);
        DecodeTime (H, Hora, Minuto, Segundo, Msec);
        J:=(Hora*3600)+(Minuto*60)+Segundo;
        K:=J*StrToFloat(JvValidateEdit2.text)/100;
        Hores  :=  StrToInt(FloatToStr(K)) div 3600;
        Minuts := StrToInt(FloatToStr(K)) div 60 mod 60;
        Segons := StrToInt(FloatToStr(K)) mod 60;
        MaskEdit3.Text:= TimeToStr(EncodeTime (Hores, Minuts, Segons,Msec));
        Maskedit4.text:=TimeToStr(StrToTime(MaskEdit2.Text)+StrToTime(MaskEdit3.Text));
end;

Si alguien me echa un cable....

Gracias por adelantado

Josep

Casimiro Notevi 02-11-2010 14:04:48

Código:

Hores  :=  StrToInt(FloatToStr(K)) div 3600;
Así, a simple vista, me parece que estás dividiendo un string entre 3600.
Cambia el paréntesis del final

Código:

Hores  :=  StrToInt(FloatToStr(K div 3600));

noshy 02-11-2010 14:38:01

Prueba asi...

Hores := round(K) div 3600;

jafera 02-11-2010 16:42:26

Gracias a los dos

La solucion de noshy funciona de fábula.

Casimiro creo que no es una ubicacion de parentesis pues falla igual

Saludos

Josep

delphi.com.ar 02-11-2010 17:37:13

¿Mi pregunta es para que conviertes un número a un string si luego vuelves a convertirlo a un valor numérico?... FloatToStr te va a convertir a string un número decimal el cual no va a aceptar StrToInt ya que espera un número entero. ¿No querrás truncar el resultado de la operación?.. en ese caso:

Código Delphi [-]
Hores := Trunc(K) div 3600

Agrego: No había leído la respuesta de noshy

jafera 02-11-2010 18:24:10

Gracias tambien por tu respuesta

Ahora necesitaria saber como le digo a esta linea que el Edit1.text tenga solo dos decimales

Código Delphi [-]
 
Edit1.Text:= FloatToStr(StrToFloat(JvValidateEdit1.Text)/I);

Es un campo que no se guarda en ninguna tabla.

Gracias

Josep

rrf 02-11-2010 19:03:35

Quizás esto te sirva:

Código Delphi [-]
  Edit1.Text:= FloatToStr(
                int ( ( StrToFloat(JvValidateEdit1.Text)/I ) *100 ) /100
                          );

Está hecho "a ojo", no lo he probado, pero seguramente te funcionará.

Saludos.

jafera 02-11-2010 19:23:17

Perfecto rrf, además le he añadido al final Km/h y queda una presentación profesionas....

Gracias

Josep

noshy 03-11-2010 17:46:44

yo usaria la funcion FloatToStrF(), me parece que menos quilombo.

Código Delphi [-]
Edit1.Text:= FloatToStrF(StrToFloat(JvValidateEdit1.Text)/I, ffFixed, 8, 2 );

jafera 04-11-2010 12:08:47

Gracias noshy, funciona correctamente y posiblemente sea mas ortodoxo

Saludos

Josep


La franja horaria es GMT +2. Ahora son las 08:40:54.

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