2012-05-12 3 views
-1

Certains corps me aider en ce qui concerne le problème suivantConversion de CString flotter

strFixFactorSide = _T("0.5"); 
dFixFactorSide = atof((const char *)(LPCTSTR)strFixFactorSide); 

"dFixFactorSide" prend valeur 0.0000;

Comment puis-je obtenir la valeur correcte?

Répondre

0

Je pense que votre CString strFixFactorSide est une chaîne Unicode (UTF-16).

Si tel est le cas, la conversion (const char *) modifie uniquement le type de pointeur, mais la chaîne vers laquelle elle pointe reste Unicode.

atof() ne fonctionne pas avec les chaînes Unicode. Si vous y insérez L"0.5", les octets 0x30 ('0') et 0x00 (qui font également partie de UTF-16 '0') seront traités comme une chaîne ASCII terminée par NUL "0" et convertis en 0.0. Si CString strFixFactorSide est une chaîne Unicode, vous devez d'abord la convertir en chaîne ASCII, puis appliquer atof() ou utiliser une fonction capable de convertir des chaînes Unicode en nombres. _wtof() peut être utilisé pour les chaînes Unicode.

+0

Je reçois erreur comme "erreur C2065: '_wtof': identificateur non déclaré". J'utilise eVC++ 4.0 – Vaibhav

+0

Avez-vous essayé d'inclure «», «», «», «»? D'autres à essayer: 'wcstod()' ou 'swscanf()'. –

+0

J'ai obtenu la solution comme ci-dessous "_stscanf (strFixFactorSide, _T ("% lf "), & dFixFactorSide);" Mais est-ce correct? – Vaibhav

1

Utilisez _tstof() au lieu de atof(), et de lancer CString à LPCTSTR, et laissez-le comme tel, au lieu d'essayer de l'obtenir à const char *. Oubliez const char * (LPCSTR) pendant que vous travaillez avec unicode et utilisez seulement const _TCHAR * (LPCTSTR). Et

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) 
{ 
    int nRetCode = 0; 

    CString s1 = _T("123.4"); 
    CString s2 = _T("567.8"); 

    double v1 = _tstof((LPCTSTR)s1); 
    double v2 = _tstof((LPCTSTR)s2); 

    _tprintf(_T("%.3f"), v1 + v2); 

    return nRetCode; 
} 

et en cours d'exécution cela donne correctement la réponse attendue.

Questions connexes