Boost lexical_cast und locale
-
Hallo,
ich frage mich gerade bei einem Programm von mir, warum es nicht meckert.

In der Main-Methode setze ich die Locale-Einstellung auf Deutsch und UTF-8 mit
setlocale (LC_ALL, "de_DE.UTF-8");Im weiteren Programmverlauf konvertiere ich std_strings in double-Zahlen mit der lexical_cast-Funktion der Boost-Library. In den Strings verwenden die Double-Zahlen den Punkt als Dezimaltrennzeichen.
string strVar = "0.001"; cout << strVar << endl; double dblVar = boost::lexical_cast< double >(strVar ); cout << dblVar << endl;Die Variable wird ohne Probleme konvertiert. Bei der Ausgabe der beiden Variablen wird beides Mal "0.001" ausgegeben. Nach der deutschen Formateinstellung müsste aber "0,001" ausgegeben werden.
Wird durch die obige setlocale-Einstellung die Zahlenformatierung nicht gesetzt?
Was müsste ich machen, damit die Zahlenformatierung ebenfalls auf deutsch ist?Das Datum wird mit diesen Einstellungen jedenfalls im deutschen Format ausgegeben.
Viele Grüße,
ottixus
-
Wenn ich mich nicht sehr irre, hat jeder C++ stream ein eigenes autonomes C++ locale-objekt mit dem die Formatierung vorgenommen wird. Ich bezweifle auch, dass setlocale die globale C++ locale ändert, wohingegen das ändern der globalen C++ locale auch die C locale ändert. Schon versucht, cout über die stream-methode imbue eine deutsche C++ locale zu übergeben?
Das Datum wird mit diesen Einstellungen jedenfalls im deutschen Format ausgegeben.
Hm, ich kenne grade keinen Streamoperator, der ein Datum formatiert, wie hast du es denn gemacht? Womöglich wurde die C-locale benutzt. Datumsformatierung via strftime vielleicht?