[C con Clase] Peuqeña dudilla!

Steven Davidson steven en conclase.net
Jue Mayo 3 14:57:18 CEST 2007


Hola David,

El pasado 2007-05-01 04:45:52, David Gonzalez escribió:

DG> Hola a todos!
DG> Queridos gurus de la programación, quiero poner en su conocimiento una
DG> duda que me embarga desde hace mucho peor no había querido preguntar
DG> por pena y por que pudieran pensar "Buuuu, que burro".

No te preocupes por el tipo de pregunta. Si has intentado solucionar el problema y has investigado acerca del tema pero sigues teniendo dudas, entonces no hay ningún problema plantear el asunto en la lista; para eso estamos.

DG> Lo que pasa es que quiero saber como se puede convertir un char o
DG> cadena cualesquiera que sea que por error el usuario escriba "153,32"
DG> en lugar de "153.32".
DG> Mi duda es como convertit la cadena a double y cambiar la coma por el
DG> punto y quedar con un valor operable.

Si el problema es la coma, entonces sugiero buscar el carácter ',' en la cadena. Puedes usar la función estándar 'strchr()'. Por ejemplo,

char szNum[64];
char *pComa;

pComa = strchr( szNum, ',' );

if( pComa )  *pComa = '.';  // Cambiamos ',' por '.'

DG> NOTA No se pueden usar atoi() ni ninguna función de C/C++, es para
DG> generar el algoritmo y como razonamiento lógico.

Si quieres hacer tu propia función de conversión, entonces debes conocer el formato para 'double' que sigue el formato IEEE 754 para números de coma flotante de doble precisión. Puedes consultar el formato yendo a este enlace: http://en.wikipedia.org/wiki/IEEE_754#Double-precision_64_bit o la versión en español: http://es.wikipedia.org/wiki/IEEE_754#Precisi.C3.B3n_doble_64-bits

Es algo complicado la primera vez que uno ve el formato, así que no te asustes mucho.


Espero que esto sea lo que pediste.

Steven


Más información sobre la lista de distribución Cconclase