C++ no es mi idioma, así que perdona este simple problema. Estoy perdiendo precisión en una conversión de cadena a doble, ¿alguien puede ayudarme?C++ Cadena para duplicar la conversión de atof perdiendo precisión?
string lAmount;
string lSuspendedInt = "131663.51";
string lAccruedInterest = "0.0";
double dSuspendedInt= atof(lSuspendedInt.c_str()); //PROBLEM HERE?
double dAccruedInterest = atof(lAccruedInterest.c_str());
double dTotal = dSuspendedInt + dAccruedInterest;
char cAmount[50];
memset(cAmount,0X00,sizeof(cAmount));
sprintf(cAmount,"%g*",dTotal);
lAmount = cAmount;
cout << "lAmount: "<<lAmount<<endl; //PRINTING: 131664 not 131663.51
He jugado con f% en la función memset sin embargo, esto da 131663.510000
Gracias de antemano.
Sapatos
Si necesitara esta cantidad exacta, consideraría usar un punto fijo en su lugar. En el lado de C++, estoy seguro de que hay mejores formas de convertir cadenas en dobles además de atof. sprintf() es otra forma C de hacerlo también si crees que el problema está ahí. Como comentario, ya que no tengo una respuesta exacta aquí para ti. –
@Michael: uno puede usar transmisiones, aunque es voluminoso, C++ 0x presenta instrucciones específicas de 'stof' (y toda la familia) como parte de la Biblioteca estándar. –