2017-02-09 5 views
0

Ich habe eine CString Variable, die ich brauche, in DoppelC++ atof/_wtof, Rundungsfehler

CString sVal(_T(" 4.2")); 
double dbl2 = _wtof(sVal); 

zu konvertieren Und ich habe DBL2 = 4.0000 anstelle von 4,2. Was könnte der Grund für die Rundung sein?

+0

Können Sie ein komplettes Hauptprogramm mit dieser Probe zeigen, bitte (und überprüfen Sie es, das Problem zuerst zeigt). Im Idealfall sollten Sie es konvertieren, um standard 'std :: wstring' zu verwenden, aber wenn nicht, würde ich die Tags so ändern, dass sie etwas MS-spezifisches enthalten. –

+3

Sind Sie in Kontinentaleuropa? (Mit anderen Worten, ist Ihre Maschine mit einem Dezimaltrennzeichen von ','?) Eingerichtet, kann es eine länderspezifische Umwandlung durchführen. –

+0

Russland, Setlocale (LC_ALL, ".1251"); Du hast Recht und ersetzst "." zu "," beseitigt das Problem –

Antwort

1

Komma ist eine der "Elemente" in der Lokalisierung

WARNUNG !!! Code unten für viele nachfolgende Konvertierungen nicht optimiert ist

#include <locale.h> 
#include <string> 

... 

CString sVal(_T(" 4.2")); 

std::string currentLocale = setlocale(LC_NUMERIC, NULL); //retrive current locale 
setlocale(LC_NUMERIC, "C"); //change numeric locale to C, now decimal separator is '.' 

double dbl2 = _wtof(sVal); 

setlocale(LC_NUMERIC, currentLocale.c_str()); //return to original locale 

Siehe http://www.cplusplus.com/reference/clocale/setlocale/

Verwandte Themen