Autor Tema: Error float  (Leído 4764 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Error float
« 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


Desconectado GeoMX

  • PIC10
  • *
  • Mensajes: 46
RE: Error float
« Respuesta #1 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).

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Error float
« Respuesta #2 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

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
RE: Error float
« Respuesta #3 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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Error float
« Respuesta #4 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

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
RE: Error float
« Respuesta #5 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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Error float
« Respuesta #6 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


 

anything