Autor Tema: Representar un float  (Leído 3232 veces)

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

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Representar un float
« en: 21 de Febrero de 2008, 18:35:27 »
Estoy dandole vueltas a la forma de representar una variable tipo float, de forma que la posición del punto esté fija, es decir si hago esto:

a=2.4;
lcd_gotoxy(1,1);
printf(lcd_putc,"  %3.2f  ",a);

en el display aparece 2.4 en una posición, pero si despues 'a' pasa a valer por ejemplo 15.6, como tiene dos digitos enteros en lugar de uno, el punto aparece una posición mas a la derecha, cuando yo quiero que esté siempre en la misma posición, y que los digitos enteros aparezcan a la izquierda.

No se si se puedo hacer lo que quiero.

1 saludo.
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 migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Representar un float
« Respuesta #1 en: 21 de Febrero de 2008, 18:40:00 »
Hola

Claro que se puede. Normalmente habría que poner

%03.2f

e imprimiría 015.2 ó 003.2, pero por alguna razón CCS no lo hace. Yo recurría a lo siguiente...

Código: [Seleccionar]
lcd_gotoxy(1,1);
if(a<100.0)
 lcd_putc("0");
if(a<10.0)
 lcd_putc("0");
printf(lcd_putc,"%3.2f",a);

Cualquier duda avísanos.
« Última modificación: 21 de Febrero de 2008, 18:43:48 por migsantiago »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Representar un float
« Respuesta #2 en: 25 de Febrero de 2008, 07:48:08 »
Es que cuando utilizas este formato %x.yf tienes que poner en "x" el número total de caracteres a imprimir, incluyendo también los decimales.
Si pones %3.2 le estás diciendo que ocupas 3 dígitos en total, de los cuales, 2 son decimales.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Representar un float
« Respuesta #3 en: 25 de Febrero de 2008, 08:20:24 »
Perdon, Manolo.
En el float los decimales son decimales, si pone %03.2f  obtendras un numero donde se mostraran dos de los decimales del float original.

Donde ocurre lo que dices es en los enteros que quieres mostrar en formato float, que se consigue con el modificador w.

Citar
Format:

The format takes the generic form %nt. n is optional and may be 1-9 to specify how many characters are to be outputted, or 01-09 to indicate leading zeros, or 1.1 to 9.9 for floating point and %w output. t is the type and may be one of the following:

c
 Character
 
s
 String or character
 
u
 Unsigned int
 
d
 Signed int
 
Lu
 Long unsigned int
 
Ld
 Long signed int
 
x
 Hex int (lower case)
 
X
 Hex int (upper case)
 
Lx
 Hex long int (lower case)
 
LX
 Hex long int (upper case)
 
f
 Float with truncated decimal
 
g
 Float with rounded decimal
 
e
 Float in exponential format
 
w
 Unsigned int with decimal place inserted. Specify two numbers for n. The first is a total field width. The second is the desired number of decimal places.
 
:mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Representar un float
« Respuesta #4 en: 25 de Febrero de 2008, 08:37:06 »
Discrepo, Marcos, en los float también ocurre.
El primer parámetro indica el total de dígitos a representar, y el segundo parámetro (detrás del punto decimal) indica la cantidad de dígitos decimales.

La cantidad de dígitos enteros, por tanto, será la resta del primer parámetro menos el segundo.

http://sopa.dis.ulpgc.es/so/cpp/intro_c/introc28.htm

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Representar un float
« Respuesta #5 en: 25 de Febrero de 2008, 08:55:20 »
Discrepo, Marcos, en los float también ocurre.
El primer parámetro indica el total de dígitos a representar, y el segundo parámetro (detrás del punto decimal) indica la cantidad de dígitos decimales.

Coincido contigo manolo, en los C que he usado siempre fue así. De todas formas para sacarse la duda (al menos con el CCS) podrían mostrarlo y ver que sucede.

- 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 Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Representar un float
« Respuesta #6 en: 25 de Febrero de 2008, 09:08:47 »
Yo ya lo he comprobado en algunas aplicaciones que he hecho, y en CCS también es así. No tengo aquí a mano ninguna simulación para que la veáis, pero probado sí que está.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Representar un float
« Respuesta #7 en: 25 de Febrero de 2008, 09:09:55 »
Lo que digo Manolo, y solo para aclarar dudas sobre si entendi bien, pongo el ejemplo:

Tengo el numero float siguiente: x= 123,45

Si escribo
printf("%03.2f",x);
obtendre una salida asi:
123.45
si mal no entiendo tu explicacion, si ahora uso:
printf("%05f",x);
obtendre:
12345

 :shock: :shock:
donde esta mi float ??? :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Representar un float
« Respuesta #8 en: 25 de Febrero de 2008, 09:23:24 »
Yo no sé lo que saldrá en tu primer caso, probablemente algo raro porque estás indicándole que utilizarás sólo 3 dígitos e intentas representar 5. La verdad es que en cuanto tenga un rato lo voy a simular para salir de dudas.

En tu segundo caso saldrá, si no me equivoco, esto: 00123

¿Encontrarás tu float?

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Representar un float
« Respuesta #9 en: 25 de Febrero de 2008, 09:30:37 »
Es como dice manolo, el primer numero indica numeros totales y el segundo los decimales. Eso es seguro. En caso de que el numero requiera más lugares del lado entero estos se muestran igual me parece. Eso no es seguro, pero así me parece.
     

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Representar un float
« Respuesta #10 en: 25 de Febrero de 2008, 09:37:02 »
No te ofendas Manolo!! :mrgreen:
La pregunta era con trampa, para hacerlos pensar...
Como explicaste asi:
Citar
Es que cuando utilizas este formato %x.yf tienes que poner en "x" el número total de caracteres a imprimir,>> incluyendo también los decimales.<<
Se entiende que si escribo %05f pasaba los decimales a la parte entera. :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Representar un float
« Respuesta #11 en: 25 de Febrero de 2008, 09:46:28 »
Ah, vale, no me ofendo, no te preocupes.

O mejor, preocúpate, porque soy muy rencoroso  :D

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Representar un float
« Respuesta #12 en: 25 de Febrero de 2008, 09:51:46 »
Glup!!! :shock: :shock: :( :(

 :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Representar un float
« Respuesta #13 en: 25 de Febrero de 2008, 09:59:58 »
el primer número no indica los enteros + los decimales, sino enteros+ el punto + los decimales, es decir el largo total de la cadena ej 123.45 ocupa 6 lugares y debe ponerse %6.2f

Acá va un ejemplo simulado con el valor 123.456789 y varias visualizaciones...

Desde %8.2f hasta la %6.2 va corriendo el valor 123.45 de a un lugar hacia la izquierda debido a que con el 8 reserva 2 lugares más, con el 7 solo 1 y con el 6 ninguno.

luego para %5.2f hasta %3.2f hace lo mismo muestra el número completo 123.45

para %2.2f y %1.2 el funcionamiento no es correcto...

para %0.xf semuestra el numero con todos los decimales posibles....  123.456792  (así aparece)
« Última modificación: 25 de Febrero de 2008, 10:04:58 por Menta »