• Sábado 21 de Diciembre de 2024, 15:21

Autor Tema:  De Float A Integer  (Leído 2319 veces)

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
De Float A Integer
« en: Miércoles 8 de Junio de 2005, 08:05 »
0
Hola amigos,
Tengo un problemilla con un código de control automático de ganancia, consigo el resultado en float, y para trabajar con el dsPIC30F6014 necesito que esta variable sea int. He intentado cambiar de tipo a lo "bestia".. poniendo (int) pero no me redondea bien me quita demasiada información.

He buscado información en Internet, pero no he podido conseguir resultados..
me podeis hechar una mano?
Me valdría si me dijerais como pasar de float a integer perdiendo lo menos
información posible..
Gracias.
(He escrito este mensaje en la entrada del foro porque no sabía que había esta sección específica para programación en C.)

Este sería el código:


RXBUF0 es el buffer de entrada, y TXBUF0 es el de salida.
Fractional es un int.
He intentado multiplicar por 10000 y después hacer el cambio..

void __attribute__((__interrupt__)) _DCIInterrupt(void) {



xxx[0]=RXBUF0;

if (xxx[0]>=xmin)
{
h[k]=h[k-1]+mu*(nivel-abs(y[k-1]));
}
else
h[k]=h[k-1];

if(h[k]<=0)
{
h[k]=0.0001;
}
if (h[k]>=hmax)
{
h[k]=hmax;
}

//h[k]=min(h[k],hmax);

y[0]=(h[k]*xxx[0]);

//y[0] = y[0]*10000;
//y[0] = (abs(y[0]))/1000;
//y_final[0] = (fractional)((y[0])/10000);
TXBUF0=(int)(y[0]);

k++;

if(k == 79)
{
k = 0;
}
}

GRACIAS

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: De Float A Integer
« Respuesta #1 en: Miércoles 8 de Junio de 2005, 17:43 »
0
Una opcion que te podria dar seria que usaras la funcion fcvt() que convierte un valor flotante a cadena(stdlib.h)
char *  gcvt ( double value, int num, char * buffer );
vale:valor a convertir,
num:cantidad de digitos a generar
buffer:donde se alojara el valor resultante

...y luego lo conviertes a integer con atoi()
int  atoi ( const char * string );
que retorna el valor numerico entero de la cadena pasada como parametro o 0 si ha ocurrido un error.

Prueba esto, ojala te sirva

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: De Float A Integer
« Respuesta #2 en: Miércoles 8 de Junio de 2005, 19:26 »
0
Hola, para pasar de float a int vas a perder los decimales de todas todas.  Al hacer un cast a integer lo que se hace es truncar el valor, así 5,83 queda como 5.  Si lo que quieres es redondear puedes hacer un simple algoritmo del tipo:
Código: Text
  1.  
  2. float valor;
  3. int valor2
  4. ...
  5. if(valor-(int)valor&#62;=0,5)
  6. valor2=(int)valor+1;
  7. else
  8. valor2=(int)valor;
  9.  
  10.  
De esta forma se te redondearía el valor, así el 5,83 se guardaría como 6 y  4,23 como 4.
Un saludo.  :lightsabre:
No hay tonto más molesto que el ingenioso.