Gleitkommazahl mit "," in Datei schreiben
-
Hallo Leute
ich schreibe semikolon-separiert einige Gleitkommazahlen mittels ofstream in eine Datei.
Leider werden die Gleitkommazahlen aktuell mit "." geschrieben und nicht mit ",".Wie kann ich meinen stream derart manipulieren, dass er "," schreibt ?
grüße Tobi
-
Schau dir mal locale an:
http://www.cplusplus.com/reference/std/locale/
-
Die Lösung wurde schon genannt. Bist du dir aber auch der Konsequenzen bewusst? Schließlich wird deine Datei damit inkompatibel zum Rest der Welt.
-
Ich hab das schonmal so probiert:
ofstream FileOut( "bla.txt" ); locale german("de_DE"); FileOut.imbue(german); double dbl = 1.0 / 3.0; FileOut << dbl << std::endl;Das raucht mir aber weg... scheinbar ist das locale "de_DE" nicht das richtige...
-
SeppJ schrieb:
Die Lösung wurde schon genannt. Bist du dir aber auch der Konsequenzen bewusst? Schließlich wird deine Datei damit inkompatibel zum Rest der Welt.
Der Sinn dieser Datei ist es, bequem von Excel / Openoffice eingelesen zu werden und mit "." kann die Software leider nicht so gut

-
Hängt halt von deinem System ab, meins arbeitet mit UTF-8 und braucht somit:
locale german("de_DE.UTF-8");Zitat:
C string containing the name of a C locale. These are system specific, but at least the two following locales must exist:
locale name description
"C" Minimal "C" locale
"" Environment's default localehttp://www.cplusplus.com/reference/clibrary/clocale/setlocale/
Was spricht gegen Environment's default locale?
-
int main() { float zahl = 5.03; std::ostringstream ss; ss << zahl; std::string szahl = ss.str(); szahl.replace(szahl.find("."), 1, ","); }So würde ich es machen und das einfach in mein File schreiben.
-
Gleitkommaproblemkind schrieb:
Das raucht mir aber weg... scheinbar ist das locale "de_DE" nicht das richtige...
Welche String Du für die die deutsche Locale nehmen must, ist leider von der Implementierung Deiner C++-Umgebung abhängig. Bei MS-VS wäre es 'german'.
FreakY<3Cpp schrieb:
int main() { float zahl = 5.03; std::ostringstream ss; ss << zahl; std::string szahl = ss.str(); szahl.replace(szahl.find("."), 1, ","); }So würde ich es machen und das einfach in mein File schreiben.
das mag ja funktionieren, ist aber vorsichtig ausgedrückt eher suboptimal. Dann würde ich doch wohl eher eine eigenen std::num_put-Facette schreiben oder eben gleich die deutsche locale wählen.
Gruß
Werner
-
Hier n Ansatz
#include <locale> #include <cstdlib> #include <iostream> using namespace std; locale get_locale(char const * const default_name = "C") { char const *n = getenv("LC_NUMERIC"); if(!n) { n = getenv("LANG"); if(!n) { n = default_name; } } return locale(n); } int main() { double const d = 2.0/3.0; cout << d << endl; locale l = get_locale("de_DE.UTF-8"); cout.imbue(l); cout << d << endl; }