Ein häufiges internationales Problem ist die Konvertierung von doppelten Werten in Strings dargestellt. Dieses Zeug ist in vielen Bereichen zu finden.Doppelte Zeichenfolge Konvertierung und Gebietsschema
Beginnend mit CSV-Dateien, die entweder
comma separated
oder
character separated
genannt werden, weil sie manchmal wie
1.2,3.4
5.6,6.4
in englischen Regionen gespeichert sind oder
1,2;3,4
5,6;6,4
in beispielsweise deutschen Regionen.
Vor diesem Hintergrund ist es irgendwie notwendig zu wissen, dass die meisten std :: -Methoden vom Gebietsschema abhängig sind. Also werden sie in Deutschland "1,2" als 1.2 lesen und es als "1,2" zurückschreiben, aber mit einem englischen Betriebssystem wird es "1,2" als 1 lesen und es als "1" schreiben.
Da das Gebietsschema ein globaler Status der Anwendung ist, ist es keine gute Idee, es in eine andere Einstellung zu ändern; und hier haben wir einige Probleme, wenn ich eine deutsche CSV-Datei auf einer englischen Maschine lesen muss oder umgekehrt.
Es ist auch schwer, Code zu schreiben, der sich auf allen Maschinen gleich verhält. Der C++ - Stream ermöglicht eine Gebietsschemaeinstellung pro Stream.
können Sie einen Stream mit Std :: C-Verhalten initialisieren und nur den Dezimalpunkt ersetzen. Dies gibt mir die Möglichkeit, das Tausendertrennzeichen zu ignorieren, das ebenfalls in Kraft treten kann. Deutsch 1000.12 kann "1.000,12" werden; oder in Englisch "1000.12" endet in völliger Verwirrung. Auch ersetzen "," durch "." wird in dieser Situation nicht helfen.
Wenn ich mit atof
und Freunden arbeiten kann ich
const char decimal_point = *(localeconv()->decimal_point);
verwenden mein Verhalten kuppeln.
Also gibt es eine schreckliche Menge an Zeug nur für internationales Doppelverhalten. Selbst mein Visual Studio stößt auf Probleme, weil die deutsche Version 8,0 als Version in die vcproj-Datei schreiben will, während eine englische Version sie in 8.0 ändern möchte, was definitiv durch einen Vorfall passiert, weil in XML 8.0 definiert ist Länder der Welt.
Also wollte ich das Problem nur ein wenig beschreiben, um nach Aspekten zu fragen, die ich vielleicht ignoriert habe. Dinge, die ich kenne:
- dezimal Pint ist locale abhängig
- 000 Separator ist locale abhängig
- Exponent locale
// German English Also known
// decimal point , .
// exponent e/E e/E d/D
// thousand sep . ,
Welches Land nutzt die Einstellung abhängig ist?Vielleicht können Sie mir einige interessante Beispiele hinzufügen, die ich bis jetzt nicht hatte.
http://en.wikipedia.org/wiki/Decimal_point#Examples_of_use – Pod