| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
davidmp
Registrado: 19 Sep 2007 Mensajes: 3
| Publicado: 19/09/2007 2:03 pm | | | Título: Variable float |
| Hola,
Al crear en una variable de tipo float con valor 99.99 y sacarla por pantalla obtengo el valor 99.989998. ¿Alguien podria explicarme esto? Utilizo Borland Turboc++.
Un saludo. |
|
| Volver arriba | |
 |
digies
Registrado: 18 Nov 2005 Mensajes: 241 Ubicación: Cono Sur
| Publicado: 19/09/2007 2:42 pm | | | Título: |
| Hola
Debes especificarle la cantidad de decimales que quieres visualizar, de lo contrario tu compilador agregará por defecto todos los decimales posibles.
| Código: | #include <stdio.h> #include <stdlib.h>
int main(void) { float valor=99.99; printf("Valor: %.2f\n\n", valor); system("PAUSE"); return EXIT_SUCCESS; }
|
Un saludo |
|
| Volver arriba | |
 |
davidmp
Registrado: 19 Sep 2007 Mensajes: 3
| Publicado: 19/09/2007 3:30 pm | | | Título: |
| Si, efectivamente, al acotar el numero de decimales el resultado obtenido es el deseado. Aun asi me resulta curioso que, caso de no hacerlo, modifique ciertos decimales o incluso la parte entera (como cuando declaro el valor de la variable como 99.999999, y obtengo el resultado 100.000000 al mostrarla por pantalla). Supongo que sera algun "procedimiento" del coprocesador matematico, o algo por el estilo.
Un saludo. |
|
| Volver arriba | |
 |
|
digies
Registrado: 18 Nov 2005 Mensajes: 241 Ubicación: Cono Sur
| Publicado: 19/09/2007 7:57 pm | | | Título: |
| Es natural que el compilador aproxime el número decimal, sobre todo si se trabja con tantas posiciones decimales como es el caso de 99.999999 Naturalmente este número tenderá a 100.00
Un saludo. |
|
| Volver arriba | |
 |
david_celta
Registrado: 02 Jun 2005 Mensajes: 45
| Publicado: 19/09/2007 9:13 pm | | | Título: |
| Si, es cierto, aunque esta sentencia es para c, pero igual en c++ funciona
>>> printf("Valor: %0.2f\n", valor); <<<
En c++ ademas hay una libreria llamada iomanip.h que junto a iostream.h se encarga de hacer eso para que lo agregues a cout<< con ios::precision(int) o algo parecido a eso, si es que se usara cout<< en vez de printf()
... y lo del compilador también.
- esto es solo una idea, hay que verificarla - _________________ Este es un bloque de texto que se puede agregar a los mensajes que publique. Texto Compilado en C++. 0 errors y 1 un warning. |
|
| Volver arriba | |
 |
Karman
Registrado: 15 Oct 2005 Mensajes: 308
| Publicado: 20/09/2007 9:22 am | | | Título: |
| | Cita: | me resulta curioso que, caso de no hacerlo, modifique ciertos decimales o incluso la parte entera (como cuando declaro el valor de la variable como 99.999999, y obtengo el resultado 100.000000 al mostrarla por pantalla)
|
Te lo explico: un float es un tipo de varible de poca presición por las siguientes caraterísticas: solamente utiliza 4bytes las expresiones decimales en el PC se expresan [num.exp], lo que deja poco espacio para el número en si (en realidad para la presición).
por ejemplo: si quisieras almacenar el número 100.10000001 fijate 2 cosas:
un entero que tb tiene 4 bytes solo soporta hasta el número: 2147483648 entonces se ve que:
10010000001 2147483648
el número no cabería en el tipo de variable, pero si a eso le agregas el espacio que se utiliza para el exponente ves que lo que el procesador hace es lo siguiente:
1001,exp -1
permitiendo que el número quepa en el tipo de variable(quitando presición), si desearas más presición tendrías que utilizar variables del tipo double o long double
S2 _________________ www.inexinferis.co.nr
-. Karman .- |
|
| Volver arriba | |
 |
|
davidmp
Registrado: 19 Sep 2007 Mensajes: 3
| Publicado: 21/09/2007 10:12 am | | | Título: |
| Ok, mil gracias a todos.
Un saludo. |
|
| Volver arriba | |
 |
|
|