Autor Tema: hitech : convertir formatos (de int a string, de float a string, etc...)  (Leído 7863 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: hitech : convertir formatos (de int a string, de float a string, etc...)
« Respuesta #15 en: 26 de Abril de 2011, 18:20:18 »
Parece ser un tema de la precisión que hitech da al formato de punto flotante. Si hago esto:

Código: [Seleccionar]
char *
ftoa(float f, int * status)
{
static char buf[17];
char * cp = buf;
unsigned long l, rem;
 
if(f < 0) {
*cp++ = '-';
f = -f;
}
l = (unsigned long)(f * 1e6);
//f -= (float)l;
//rem = (unsigned long)(f * 1e6);
sprintf(cp, "%lu",l);//.%6.6lu", l, rem);
return buf;
}

con el mismo valor de antes 476.005, lo que representa es: 476004352, entonces creo que no se puede hacer nada.

Saludos.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: hitech : convertir formatos (de int a string, de float a string, etc...)
« Respuesta #16 en: 27 de Abril de 2011, 16:47:55 »
Bueno, para mi aplicación he echo un apaño, consiste en escalar los datos, y guardarlos en un unsigned long, en lugar de guardar 476.005, guardo: 476005000, la funcion queda así:

Código: [Seleccionar]
char *
long_to_string(unsigned long f, int * status)
{
static char buf[17];
char * cp = buf;
unsigned long l, rem;

l = (f / 1000000);
rem = (f % 1000000);
sprintf(cp, "%lu.%6.6lu", l, rem);
return buf;
}

Saludos.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡