Autor Tema: ¿como cambiar de formato de float a int?  (Leído 39135 veces)

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

Desconectado robin_ramirez

  • PIC10
  • *
  • Mensajes: 8
¿como cambiar de formato de float a int?
« en: 10 de Mayo de 2008, 14:29:45 »
 hola amigos del foro mi problema es que no se como obtener la parte decimal de una variable de tipo coma flotante (float) para pasarla a formato entero (int), tambien deseo saber cuantos bits componen a la fparte entera y cuantos a la parte decimal
 para esto se debe tener en cuenta que yo utilizo el compilador picc.
 !gracias¡

favor enviar info al email: robin_elmello@hotmail.com

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: ¿como cambiar de formato de float a int?
« Respuesta #1 en: 10 de Mayo de 2008, 14:36:19 »
Hola

Las respuestas del foro no son para llevar, solo se te va a ayudar aquí mismo.

Para obtener la parte entera de un entero solo usa un casting...

float flotante=12.345;
int entero;

...

entero=(int)flotante;

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: ¿como cambiar de formato de float a int?
« Respuesta #2 en: 10 de Mayo de 2008, 23:30:56 »
Saludos Robin!
Pues ya migsantiago te ha resuelto tu problema.
Solo quería acotar lo que él mismo te menciona:

Las respuestas del foro no son para llevar, solo se te va a ayudar aquí mismo.

Recuerda Robin, que la idea del foro es compartir conocimientos y experiencias entre todos...
Si deseas la ayuda en tu correo deberás buscarte a un asesor personal o algo así...

En cambio, si la información se deja aquí en el foro estará al alcance de otra persona que tal vez tenga el mismo problema, y pueda beneficiarse también.

Es decir, como los mosqueteros: "uno para todos y todos para uno"  :D
Espero que entiendas nuestras razones.
Ok nos leemos!  :mrgreen:
« Última modificación: 10 de Mayo de 2008, 23:33:51 por firepic »
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: ¿como cambiar de formato de float a int?
« Respuesta #3 en: 11 de Mayo de 2008, 10:43:42 »
Lo que también pudo haber hecho es usar el botón notificar...



Y recibir por mail los cambios en el tema actual.

Nunca lo he probado  :mrgreen:

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: ¿como cambiar de formato de float a int?
« Respuesta #4 en: 11 de Mayo de 2008, 14:13:39 »
existen varias funciones... algunas redondean, otras truncan... aca te dejo un par:

f=CEIL(x)
Obtiene el valor entero más pequeño, mayor que el número real x, es decir, hace un redondeo por exceso del número real x. El prototipo de esta función está en el fichero de cabecera math.h
Ejemplo:
  float x = 2.871;
  num = ceil(x)            // num = 3

f=FLOOR(x)
Calcula el valor entero más grande, menor que el número real x, es decir, hace un redondeo por defecto del número real x. El prototipo de esta función está en el fichero de cabecera math.h.
Ejemplo:
  float x = 3.871;
  num = floor(x)           // num = 3

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: ¿como cambiar de formato de float a int?
« Respuesta #5 en: 11 de Mayo de 2008, 14:17:46 »
Hola gera

Hay que tener cuidado al usar floor o ceil ya que los tipos de esas funciones no son int, que es lo que necesita robin.

Código: [Seleccionar]
     double floor (      double x );
      float floor (       float x );
long double floor ( long double x );

Por cierto, el foro me mandó un mail haciendo uso de la función Notificar, funciona OK.

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: ¿como cambiar de formato de float a int?
« Respuesta #6 en: 11 de Mayo de 2008, 15:22:49 »
Hola robin, el formato de coma flotante que utiliza CCS ocupa 4 bytes, el primero (el LSB) contiene 8 bits con el exponente del numero, el siguiente bit es el bit de signo y los 23 bits restantes son la mantisa del mismo.

Si lo que quieres hacer es obtener la parte decimal del numero float entonces te conviene utilizar la función modf asi:

Código: [Seleccionar]
float Numero;
float Entero;
float Decimal;

Decimales = modf(Numero, &Entero);

Decimales almacena la componente decimal com ".xxxx". El problema con tratar de guarda la parte decimal de un numero float en una variable int es que indudablemente habra casos en los que perderás información, por lo tanto no existirá una función existente en CCS que pueda contemplar todos los casos. Deberás crear una particular para tu programa, puedes partir de la función modf, pero deberas ver como transladar los decimales a un numero entero representativo de los mismos. Realmente es raro lo que quieres lograr, porque con un int solo podrás obtener decimales con un incremento mínimo de +-0.0039, y es un desperdicio de exactitud para un numero float. Si solo necesitas una precisión de 3 o 4 decimales puedes utilizar un formato de numero con coma fija y asi tragar muchos menos recursos de tu querido PIC. Es lo que yo utilizo en mis proyectos en estos casos, sobre todo con la serie 16F o inferiores.

Esperamos tu respuesta. Un saludo.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado robin_ramirez

  • PIC10
  • *
  • Mensajes: 8
Re: ¿como cambiar de formato de float a int?
« Respuesta #7 en: 11 de Mayo de 2008, 16:54:26 »
gracias amigos por sus respuestas yo ya he utilizado la funcion modf pero no me arrojo ningun dato
yo pienso eue es por el pic que estoy utilizando (pic16f873a) o por el simulador proteus. de todos modos tendre en cuenta las otras opciones que ustedes me plantean. les estoy agradecido por sus consejos sobre el foro espero ayudarles en algo mas adelante. :-/

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: ¿como cambiar de formato de float a int?
« Respuesta #8 en: 11 de Mayo de 2008, 18:14:43 »
Hola robin, recuerda que para poder utilizar la función modf necesitas especificar #include <math.c> de lo contrario no podrás compilarlo siquiera. Ni el PIC ni el simulador pueden ser objeto de fallas en este caso, yo creo que le estas errando en el código. Recuerda que modf retorna el resultado en float y con el siguiente formato "0.xxxx" asi que si quieres pasarlo a int directamente el resultado va a ser cero siempre.

Te recomiendo de nuevo que pruebes con utilizar numeros decimales con coma fija, en CCS puedes implementarlo con variables de 2 bytes o de 4 bytes (long y int32 respectivamente). Aunque la variable int32 ocupe la misma cantidad de memoria que un numero float, los calculos con la variable entera son mucho mas rapidos (hasta 30 o 40 veces mas rapido). Además extraer los decimales de un numero con coma fijo se puede hacer con operaciones de manipulacion de bits, que tambien son extremadamente rápidas.

Un saludo.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado KNABBIS20

  • PIC10
  • *
  • Mensajes: 1
Re: ¿como cambiar de formato de float a int?
« Respuesta #9 en: 14 de Enero de 2009, 17:39:06 »
Gonzalo_BlackHawk podrias subir un ejemplo de codigo como decis.

Muchas gracias
La inmoralidad de hoy sera la moralidad de mañana

Desconectado Rick_12

  • PIC10
  • *
  • Mensajes: 1
Re: ¿como cambiar de formato de float a int?
« Respuesta #10 en: 03 de Septiembre de 2021, 16:19:11 »
Hola tengo una duda como puedo poner en practica esto en el c++, en una tarea me dejaron el siguiente problema    

Leer un número en formato real e imprimir su parte entera.

la verdad estoy confundido y ya nose como  solucionarlo
 :? :?

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re: ¿como cambiar de formato de float a int?
« Respuesta #11 en: 03 de Septiembre de 2021, 16:33:13 »
Hola tengo una duda como puedo poner en practica esto en el c++, en una tarea me dejaron el siguiente problema    

Leer un número en formato real e imprimir su parte entera.

la verdad estoy confundido y ya nose como  solucionarlo
 :? :?

Hola

Las respuestas del foro no son para llevar, solo se te va a ayudar aquí mismo.

Para obtener la parte entera de un entero solo usa un casting...

float flotante=12.345;
int entero;

...

entero=(int)flotante;
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32


 

anything