Ho un valore che ho letto da un file e viene memorizzato come char *. Il valore è un numero monetario, #. ##, ##. ##, o ###. ##. Voglio convertire il char * in un numero che posso usare nei calcoli, ho provato atof e strtod e mi hanno dato solo i numeri della spazzatura. Qual è il modo corretto per farlo, e perché il modo in cui lo sto facendo è sbagliato?Conversione di char * in float o double
Questo è essenzialmente ciò che sto facendo, solo il valore char * viene letto da un file. Quando stampo le variabili temp e ftemp sono solo immondizie, numeri negativi giganteschi.
Un altro Edit:
Sono in esecuzione esattamente questo 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;
}
e la mia uscita è il prezzo: 3.344.336,000 mila, 3344336,000000
Edit: Ecco il mio codice
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);
il mio file di input è nome molto semplice, coppie di valori come questo:
NAME|VALUE
NAME|VALUE
NAME|VALUE
con il valore di essere in dollari ammonta
RISOLTO: Grazie a tutti, stavo usando% d al posto di% f e didn' t avere le intestazioni giuste incluse.
Il problema deve essere da qualche altra parte, il codice che hai postato è perfettamente valido e funzionante. Per favore mostraci come leggi il tuo file. –
1. 'atof' restituisce' double' pure: http://pubs.opengroup.org/onlinepubs/007904875/functions/atof.html – ArjunShankar
2. '% d' è per numeri interi. Usa '% f'. – ArjunShankar