Tengo un valor que leo de un archivo y se almacena como un char *. El valor es un número monetario, #. ##, ##. ##, o ###. ##. Quiero convertir el carácter * en un número que puedo usar en los cálculos, lo he intentado con atof y strtod y simplemente me dan números de basura. ¿Cuál es la forma correcta de hacer esto y por qué lo estoy haciendo mal?Conversión de char * a flotación o doble
Esto es esencialmente lo que estoy haciendo, solo se lee el valor de char * de un archivo. Cuando imprimo las variables temp y ftemp son simplemente basura, números negativos gigantescos.
Otra edición:
Estoy funcionando exactamente esto en gcc
#include <stdio.h>
int main()
{
char *test = "12.11";
double temp = strtod(test,NULL);
float ftemp = atof(test);
printf("price: %f, %f",temp,ftemp);
return 0;
}
y mi salida es el precio: 3,344,336.000000, 3344336,000000
Editar: Aquí está mi código
if(file != NULL)
{
char curLine [128];
while(fgets(curLine, sizeof curLine, file) != NULL)
{
tempVal = strtok(curLine,"|");
pairs[i].name= strdup(tempVal);
tempVal = strtok(NULL,"|");
pairs[i].value= strdup(tempVal);
++i;
}
fclose(file);
}
double temp = strtod(pairs[0].value,NULL);
float ftemp = atof(pairs[0].value);
printf("price: %d, %f",temp,ftemp);
mi archivo de entrada es el nombre muy simple, pares de valores como esta:
NAME|VALUE
NAME|VALUE
NAME|VALUE
con el valor siendo cantidades de dinero
resuelto: Gracias a todos, yo estaba usando% d en lugar de% f y didn' t tienen los encabezados correctos incluidos.
El problema debe ser en otro lugar, el código que ha publicado es perfectamente válido y funciona. Por favor, muéstranos cómo lees tu archivo. –
1. 'atof' devuelve' double' también: http://pubs.opengroup.org/onlinepubs/007904875/functions/atof.html – ArjunShankar
2. '% d' es para enteros. Use '% f'. – ArjunShankar