2011-04-26 15 views
5

¿cómo puedo convertir una variable CString en un punto flotante? (estoy usando Visuall C++ 6.0 y el MFC)Convertir CString para flotar en mfc

Estoy tratando de usar un cuadro de edición para devolver un valor que estoy poniendo en una matriz de puntos flotantes. Estoy usando el método GetWindowText para obtener el valor, que devuelve un CString. Entonces necesito convertir a un punto flotante. (¿O simplemente estoy haciendo las cosas completamente de la manera incorrecta?).

supongo que hay métodos para hacer esto ya en el MFC. (Ya han utilizado el método de formato para convet a un CString mostrar los valores de la matriz en el cuadro de edición)

Gracias.

Respuesta

7

sólo puede hacer

CString pi = "3.14"; 
    return atof(pi); 

EDITAR

También utilice esta función:

CString pi = "3.14"; 
    return _ttof(pi); 

Lectura de un valor de cadena y lo revisará/convertirlo a flotar le permite localizar el error cuando hay uno. Todo lo que necesita es una ayuda de una función de tiempo de ejecución de C: strtod() o atof().

yo preferiría strtod como segundo argumento devuelve un puntero a la cadena donde el análisis sintáctico terminado:

CString str; 
m_edtMyEditBox.GetWindowText(str); 
char *pEnd; 
double dValue = strtod(str.GetBuffer(str.GetLength()), &pEnd); 
if (*pEnd != '\0') 
{ 
    // Error in parsing 
} 
str.ReleaseBuffer(); 
+1

creo que debería ser 'CString pi = _T ("3.14");' si va a use _ttof() – MikMik

+0

@MikMik: si la aplicación es compatible con caracteres Unicode, entonces debe usar _T() Macro, de lo contrario no necesitará esa macro. – karthik

+5

Primero, es 2011. Las aplicaciones deben ser compatibles con Unicode. Y segundo, si la aplicación es compatible con Unicode, debe usar L "String" y _wtof. Si no, "String" y atof. _T ("String") y _ttof son versiones genéricas que se correlacionan con la correcta según la configuración del proyecto. Pero mezclar "String" y _ttof es mezclar un literal ANSI con una función genérica, que accidentalmente funciona en una compilación no unicode, pero es incorrecta. – MikMik