Autor Tema: manejo float  (Leído 1863 veces)

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

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
manejo float
« en: 24 de Julio de 2007, 16:35:05 »
como se maneja una variable de tipo float? lo quiero para realizar una división y mostrarla por displays, es decir se puede tener la parte entera en un int o int16 y la parte decimal en otro int o int16, como puedo mostrarlos?? para PICs 16f
.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: manejo float
« Respuesta #1 en: 24 de Julio de 2007, 19:57:13 »
como se maneja una variable de tipo float? lo quiero para realizar una división y mostrarla por displays, es decir se puede tener la parte entera en un int o int16 y la parte decimal en otro int o int16, como puedo mostrarlos?? para PICs 16f

Puedes hacer lo que se te ocurra siempre que lo hagas bien, eso es la ventaja del software. :)

Lo que no me queda claro es si quieres usar float y mostrarlo en un LCD o si quieres usar enteros y a su vez también mostrarlos en el LCD.  ambos métodos son válidos pero llevan a manipulaciones diferentes de los datos

PD: en el foro es un tema que sale muchas veces.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: manejo float
« Respuesta #2 en: 24 de Julio de 2007, 21:47:36 »
esque quiero hacer una division y si tiene decimales mostrar uno o dos decimales, en 5 displays de leds, ya he logrado desplegar la parte entera, pero no se me ocurre como hacerlo para la parte decimal, porque no he manipulado un float, y pues haber si lo logro, un saludo, gracias.

uso display de leds porque no tengo lcd
.

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: manejo float
« Respuesta #3 en: 25 de Julio de 2007, 06:18:34 »
Una idea. Uds me dirán si es viable o no.

Si tenés tu número en la variable float F, por ejemplo F=45,235 y vos lo pasas a entero: I=(int)F te queda I=45
Para visualizar los decimales se puede hacer:



Primer decimal D1= (int)((F-I)*10);                           // toma la parte entera de 2,3500 = 2
Segundo decimal D2= (int)((F-I)*100-D1*10);            // toma la parte entera de 23,500-20 = 3
Tercer decimal D3= (int)((F-I)*1000-D1*100-D2*10); //toma la parte entera de 235,00-200-30= 5

Esto consume mucho programa, pero optimiza ram


Primer Decimal     DF1 = (F-I)*10;        // 2,3500
                         D1 = (int)DF1;         // 2
Segundo Decimal  DF2 = (DF1-D1)*10;  // (2,3500-2)*10 = 3,500
                         D2 = (int)DF2;         // 3
Tercer Decimal    DF3 = (DF2-D2)*10;  // (3,500-3)*10 = 5,000
                         D3 = (int)DF3;        // 5

Acá las fórmulas son más simples, se usa menos memoria de programa, pero se consume el doble de ram


Primer Decimal     AUX = (F-I)*10;         // 2,3500
                         D1 = (int)AUX;          // 2
Segundo Decimal  AUX = (AUX-D1)*10;  // (2,3500-2)*10 = 3,500
                         D2 = (int)AUX;         // 3
Tercer Decimal    AUX = (DF2-D2)*10;  // (3,500-3)*10 = 5,000
                         D3 = (int)AUX;        // 5

Esto es lo más óptimo, pues se usa menos memoria de programa que en el caso 1. En sí es similar al caso 2, pero se usa una variable auxiliar con lo que el uso de ram es de n+1 en lugar de 2n, siendo n el número de decimales.

     

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: manejo float
« Respuesta #4 en: 25 de Julio de 2007, 13:12:51 »
también puedes hacer que el resultado de ese float te quede en unidades menores, por ejemplo: 5 voltios , trata que quede 5000 mV allí tienes los 3 digitos que puedes separar con el punto del 7-seg (además que te ahorras el float, y llevas el valor a entero largo

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado freshdesing

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 88
Re: manejo float
« Respuesta #5 en: 26 de Julio de 2007, 13:41:50 »
Pues ahora mismo estaba liado con eso... y estaba buscando en el foro. Yo lo he hecho de la siguiente manera:

float acuario;
int decenas, unidades, decimas;

decenas=(int) acuario/10;

unidades=(int) acuario-(decenas*10);
         
decimas=(int) (acuario*10-(decenas*100+unidades*10));


Supongo que esto tardara un "ratito" con tanta multiplicación.

Un saludo


 

anything