2011-06-19 31 views
7

¿Cómo puedo convertir un doble en un const char, y luego convertirlo de nuevo en un doble?Double to Const Char *

Quiero convertir el doble en una cadena, escribirlo en un archivo mediante fputs, y luego, cuando lo lea, deberá volver a convertirse en un doble.

Estoy usando Visual C++ 2010 Express Edition.

+0

Si está usando C++, ¿realmente quiere usar char y fputs? –

+1

Es mejor utilizar archivos binarios, en lugar de archivos de texto, y almacenar el doble "tal cual". Luego léelo "tal como está". Asegúrese de que la "estructura" del archivo no cambie. – Ajay

+0

Me gustaría apoyar lo que dijo Ajay: es mucho más efectivo usar archivos binarios y almacenar los dobles como dobles en lugar de convertirlos a una representación decimal (¡aunque solo sea porque es probable que introduzcan errores de redondeo!), Solo para ser capaz de escribirlo en un archivo de texto en forma de cadena. – leftaroundabout

Respuesta

6

Si lo que desea es escribir las double valores en un archivo, sólo tiene que escribirlo, sin convirtiéndolos en const char* . Convertirlos en const char* es excesivo.

sólo tiene que utilizar std::ofstream como:

std::ofstream file("output.txt")' 

double d = 1.989089; 

file << d ; // d goes to the file! 

file.close(); //done! 
+3

¡Gracias! De hecho, no sabía que esto fuera posible, jaja. Solo he estado trabajando con C++ durante unos días. –

8

Debido a que agregaste C++ para las etiquetas, le sugiero que utilice std::stringstream:

#include <sstream> 

stringstream ss; 
ss << myDouble; 
const char* str = ss.str().c_str(); 
ss >> myOtherDouble; 
+1

Debe agregar que después de cualquier llamada a una función miembro no consistente, el puntero no debe tratarse como válido. – lccarrasco

3

Puede utilizar estas funciones para convertir desde y hacia:

template <class T> 
bool convertFromStr(string &str, T *var) { 
    istringstream ss(str); 
    return (ss >> *var); 
} 

template <class T> 
string convertToStr(T *var) { 
    ostringstream ss; 
    ss << *var; 
    return ss.str(); 
} 

Ejemplo:

double d = 1.234567; 
string str = convertToStr<double>(&d); 
cout << str << endl; 
double d2; 
convertFromStr<double>(str, &d2); 
cout << d2 << endl; 
1

Utilice esta funcition:

const char* ConvertDoubleToString(double value){ 
    std::stringstream ss ; 
    ss << value; 
    const char* str = ss.str().c_str(); 
    return str; 
}