Ich möchte pi als 3,141592
anstatt als 3.141592
lesen und schreiben, da die Verwendung des Kommas in vielen europäischen Ländern üblich ist. Wie kann ich dies mit iostream
s erreichen? Mit anderen Worten
sollte drucken
%Vor%zur Standardausgabe.
Sie sollten basic_ios::imbue
verwenden, um das bevorzugte Gebietsschema festzulegen.
Sehen Sie sich hier Ссылка
anMit Locales können Sie den bevorzugten Weg des Benutzers wählen. Wenn ein Computer in Italien Komma verwendet, um Dezimalziffern zu trennen, wird der Punkt in den USA immer noch verwendet. Die Verwendung von Gebietsschemas ist eine gute Übung.
Aber wenn Sie explizit die Verwendung des Kommas erzwingen wollen, werfen Sie einen Blick hier: Ссылка
Hier ein kleines Beispiel, das ich gerade mit g ++ gemacht habe, das das char ',' erzwingt (die Übergabe des Trennzeichens als Template Argument ist nur zum Spaß, nicht wirklich notwendig)
%Vor% Beachten Sie, dass ich mit cout.getloc()
nur eine einzelne Facette im aktuell eingestellten Gebietsschema überschreiben möchte, das heißt, in den aktuellen Gebietsschemaeinstellungen von cout ändere ich nur, wie die Interpunktion ausgeführt wird.
do_decimal_point
ist eine virtuelle Funktion von std::numpunct
, die Sie neu definieren können, um Ihr benutzerdefiniertes Trennzeichen bereitzustellen. Diese virtuelle Funktion wird von numpunct::decimal_point
beim Drucken Ihrer Nummer verwendet.
Wie @AkiRoss sagte, müssen Sie Gebietsschemas verwenden. Im Allgemeinen , in jedem
Programm schreiben Sie, eine der allerersten Aktionen in main
sollte sein, das globale Gebietsschema auf die Wahl des Benutzers zu setzen
etwas wie:
Dies sollte systematisch sein, in jedem Programm, das interagiert mit einem menschlichen Benutzer. Alle danach geöffneten Dateien werden wird automatisch mit dem korrekten Gebietsschema versehen.
Alternativ können Sie das gewünschte Gebietsschema explizit angeben Verwenden Sie:
%Vor% Das Problem dabei ist, dass es keinen Standard für das Gebietsschema gibt
Namen. Etwas wie "it_IT.UTF-8"
entspricht dem Posix
Standard und wird im Internet verwendet; Windows hat traditionell
verwendet ein anderes Format (obwohl neuere Windows scheinen
akzeptiere dieses Format auch).
Was std::cin
, std::cout
und std::cerr
übrig lässt. Diese sind
geöffnet, bevor Sie main
eingeben, und muss daher mit der
neues Gebietsschema (Um eine Kopie des aktuellen globalen Gebietsschemas zu erhalten, verwenden Sie
der Standardkonstruktor von std::locale
.)
Wenn Sie schließlich Binärdateien öffnen, sollten Sie sich dessen bewusst sein
wird auch mit dem globalen Gebietsschema versehen sein. Was kann Code tun
Übersetzung. In solchen Fällen sollten Sie sie explizit hinzufügen
mit std::locale::classic()
, oder erstellen Sie ein neues Gebietsschema durch Zusammenführen
Die codecvt
Facette von std::locale::classic()
mit der anderen
Facetten des globalen Gebietsschemas. ( std::locale
hat spezielle
Funktionen und Konstruktoren dafür.)
Tags und Links c++ iostream formatting decimal-point comma