[C con Clase] decimales en float
Steven R. Davidson
vze266ft en verizon.net
Dom Dic 10 19:54:23 CET 2006
Hola Rafael,
Rafael Roman Otero wrote:
> pero no funcionaba, y al depurar (no se si este bien dicho) y darle en
> 'vigilar variable' (uso el dev c++) note que al introducir con el scanf
> 3.1416 lo que se guardaba en la variable era 3.14159989 por lo que no
> funcionaba pues 31415%31416 no es 0. Aunque funcionaria bien si tomara
> solo 3 digitos despues del punto.
>
Ya te han contestado, pero quiero agregar un método alternativo al que
se ha presentado. Realmente tal método se basa en el tuyo: manejar
números enteros.
Lo que podemos hacer es aceptar la información como cadenas de
caracteres. Luego, podemos convertir tales cadenas en número enteros.
Por ejemplo,
char szNumero[32];
scanf( "%s", &szNumero );
Tendríamos que buscar la coma decimal para convertir la información a un
número entero. Por ejemplo,
szNumero <- "3.1416"
Manipularíamos la cadena para que resultara en:
szNumero <- "31416"
Ahora convertimos la cadena en un número entero:d
int nNumero = atoi( szNumero );
Finalmente, podemos aplicar tu idea de manejar números enteros.
Esto funciona si los valores son introducidos por el teclado. Si son
generados o calculados, entonces tendríamos problemas de redondeo y de
imprecisión.
Sinceramente prefiero la idea de Salvador de implementar un nivel de
tolerancia para manejar valores de suficiente precisión.
Espero que esto te ayude.
Steven
Más información sobre la lista de distribución Cconclase