TODOPIC

Lenguajes de programación para PC => C, C#, C++ => Mensaje iniciado por: migsantiago en 06 de Marzo de 2006, 18:51:00

Título: Error float
Publicado por: migsantiago en 06 de Marzo de 2006, 18:51:00
Hola

En un programa tengo 2 variables float


   float   h_ini_dec;
   float   h_ter_dec;

y una CString texto_t

Y hago conversión de datos para vaciarlos en texto_t

texto_t.Format("%02.0f h %02.0f m %02.0f s",(h_ter_dec-h_ini_dec),(((h_ter_dec-h_ini_dec)%1)*60),(((((h_ter_dec-h_ini_dec)%1)*60)%1)*60));

Es una operación para obtener un dato como 12.5 en formato hms: 12 h 30 m 00 s.

Pero el compilador me marca un error:

CronoLink nppDlg.cpp(298): error C2296: "%" : no es válido; el operando izquierdo es de tipo "float"

¿Cómo lo corrijo?

Sonrisa

Título: RE: Error float
Publicado por: GeoMX en 06 de Marzo de 2006, 19:57:00
El error me parece es con el operador de módulo (%) en las últimas dos partes de la instrucción. Ese operador se usa para operandos enteros, prueba con la función fmod.

Codigo:
double fmod( double dividendo, double divisor );


Saludos,
José Jorge (Geo).
Título: RE: Error float
Publicado por: migsantiago en 06 de Marzo de 2006, 21:39:00
Gracias Geo, ya funcionó. Solo tengo que corregir unos detalles.

#include <math.h>
...

texto_t.Format("%02.0f h %02.0f m %02.0f s",(h_ter_dec-h_ini_dec),(fmod((h_ter_dec-h_ini_dec),1)*60),(fmod((fmod((h_ter_dec-h_ini_dec),1)*60),1)*60));

¿De casualidad hay alguna clase que haga este cálculo más rápido? invasor
Título: RE: Error float
Publicado por: elmasvital en 07 de Marzo de 2006, 19:34:00
Escrito originalmente por migsantiago
Gracias Geo, ya funcionó. Solo tengo que corregir unos detalles.

#include <math.h>
...

texto_t.Format("%02.0f h %02.0f m %02.0f s",(h_ter_dec-h_ini_dec),(fmod((h_ter_dec-h_ini_dec),1)*60),(fmod((fmod((h_ter_dec-h_ini_dec),1)*60),1)*60));

¿De casualidad hay alguna clase que haga este cálculo más rápido? invasor


no conozco el visual c pero si existe algun tipo de dato time puedes convertirlo a ese tipo de dato y luego mostrarlo
Título: RE: Error float
Publicado por: migsantiago en 07 de Marzo de 2006, 20:31:00
Tienes razón elmasvital.

Originalmente, los datos que estoy regresando a hms eran objetos de la clase ColeDateTime, pero no se me ocurría alguna forma de sacar la diferencia entre dos tiempos de esa clase mas que pasándolos a float en formato horas con decimales.

Voy a revisar la clase para ver que comandos se pueden usar. Sonrisa Gigante
Título: RE: Error float
Publicado por: elmasvital en 08 de Marzo de 2006, 07:56:00
Escrito originalmente por migsantiago
Tienes razón elmasvital.

Originalmente, los datos que estoy regresando a hms eran objetos de la clase ColeDateTime, pero no se me ocurría alguna forma de sacar la diferencia entre dos tiempos de esa clase mas que pasándolos a float en formato horas con decimales.

Voy a revisar la clase para ver que comandos se pueden usar. Sonrisa Gigante


pues en otros lenguajes se permite realizar operaciones directamente de resta de fechas y horas. Mas en concreto para fechas en vbasic está dafediff y las horas prueba a hacer una simple resta con dos datos de tipo hora.

1 saludo
Título: RE: Error float
Publicado por: migsantiago en 08 de Marzo de 2006, 10:07:00
Sí, ya vi que aquí también se podía, pero como no conocía lo que eran las clases, en ese momento me fui por lo difícil. Voy a iniciar ese programa desde cero, pero ahora usando siempre la clase.

La clase es COleDateTime y tiene un montón de métodos para comparar fechas, restarlas, sumarlas, etc.

Lo bueno es que con las explicaciones del foro y tutoriales sobre POO le estoy entendiendo mejor.

Sonrisa Gigante