stod funktioniert mit boost :: locale @ nicht richt
Ich versuche, boost :: locale und std :: stod zusammen in einem deutschen Gebietsschema zu verwenden, in dem ein Komma das Dezimaltrennzeichen ist. Betrachten Sie diesen Code:
boost::locale::generator gen;
std::locale loc(""); // (1)
//std::locale loc = gen(""); // (2)
std::locale::global(loc);
std::cout.imbue(loc);
std::string s = "1,1"; //float string in german locale!
double d1 = std::stod(s);
std::cout << "d1: " << d1 << std::endl;
double d2 = 2.2;
std::cout << "d2: " << d2 << std::endl;
std :: locale loc ("") erstellt das richtige Gebietsschema und die Ausgabe ist
d1: 1,1
d2: 2,2
as ich erwarte. Wenn ich Zeile (1) und Kommentarzeile (2) auskommentiere, ist die Ausgabe
d1: 1
d2: 2.2
Das Ergebnis für d2 ist zu erwarten. Soweit ich das verstehe, möchte boost :: locale, dass ich explizit spezifiziere, dass d2 als Zahl formatiert werden soll und
std::cout << "d2: " << boost::locale::as::number << d2 << std::endl;
fixiert die Ausgabe wieder auf 2,2. Das Problem ist, dass std :: stod 1.1 nicht mehr als gültige Gleitkommazahl betrachtet und auf 1 abschneidet.
Meine Frage lautet: Warum funktioniert std :: stod nicht mehr, wenn ich mein Gebietsschema mit boost :: locale generiere?
Zusätzliche Informationen: Ich verwende VC ++ 2015, Boost 1.60, keine Intensivstation, Windows 10
Aktualisieren
Ich habe festgestellt, dass das Problem behoben ist, wenn ich das globale Gebietsschema zweimal festgelegt habe, zuerst mit std :: locale ("") und dann mit boost:
std::locale::global(std::locale(""));
bl::generator gen;
std::locale::global(gen(""));
Ich habe keine Ahnung, warum es sich so verhält!