HOWTO · C++

Wie druckt man Zahlen mit angegebenen Dezimalpunkten in C++

Dieser Artikel führt ein, wie man die Zahlen mit angegebenen Dezimalpunkten in C++ druckt

Auf dieser Seite

Um einen Gleitkommawert mit einer festgelegten Anzahl von Nachkommastellen auszugeben, schreiben Sie std::fixed gefolgt von std::setprecision(n) in std::cout. Mit std::fixed << std::setprecision(2) werden Werte beispielsweise mit zwei Nachkommastellen formatiert. Binden Sie <iostream> für die Ausgabe und <iomanip> für die Manipulatoren ein. Die Codebeispiele und darin sichtbaren Beschriftungen oder Ausgaben bleiben unverändert auf Englisch.

std::fixed und std::setprecision verwenden

std::fixed aktiviert die Festkommadarstellung. Ist dieses Format aktiv, legt std::setprecision(n) die Anzahl der Nachkommastellen fest. Werte werden für die Anzeige gerundet und bei Bedarf mit nachgestellten Nullen aufgefüllt. Ohne std::fixed bestimmt std::setprecision(n) stattdessen die Anzahl der signifikanten Stellen. Weitere Einzelheiten finden Sie in der Anleitung zu setprecision.

Kompilieren und starten Sie dieses vollständige Programm:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

#include <iomanip>
#include <iostream>

int main() {
    const double values[] = {3.14159, 2.5, 0.004};
    std::cout << std::fixed << std::setprecision(2);

    for (double value : values) {
        std::cout << value << '\n';
    }
}
3.14
2.50
0.00

Der erste Wert wird für die Anzeige gerundet, der zweite mit einer nachgestellten Nachkommastelle ausgegeben und der dritte mit derselben Genauigkeit von zwei Nachkommastellen formatiert. Die Formatierung ändert die angezeigte Darstellung, aber weder die gespeicherten Werte noch macht sie Gleitkommaoperationen exakt. Für drei Nachkommastellen verwenden Sie std::setprecision(3).

Der Stream behält std::fixed und die gewählte Genauigkeit für nachfolgende Einfügungen von Gleitkommawerten bei. Legen Sie eine andere Genauigkeit fest, wenn spätere Werte anders dargestellt werden sollen. Die Manipulatoren sind in <iomanip> deklariert.

Werte mit std::setw und std::setfill ausrichten

Für Spalten legt std::setw(width) eine Mindestfeldbreite für den als Nächstes eingefügten Wert fest. Ein Wert, der mehr Platz benötigt, wird nicht abgeschnitten; nach dieser Einfügung wird die Breite zurückgesetzt. std::setfill(ch) wählt das Füllzeichen und bleibt aktiv, bis es geändert wird. Zahlen werden standardmäßig rechtsbündig ausgerichtet.

Dieses vollständige Beispiel verwendet Punkte als Füllzeichen und gibt jede formatierte Zahl in einem acht Zeichen breiten Feld aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

#include <iomanip>
#include <iostream>

int main() {
    std::cout << std::fixed << std::setprecision(2) << std::setfill('.')
              << std::setw(8) << 12.5 << '\n'
              << std::setw(8) << 3.75 << '\n';
}
...12.50
....3.75

Wenden Sie std::setw für jeden Wert erneut an, für den Sie eine Feldbreite benötigen; ein anderes Füllzeichen festzulegen, bestimmt keine Breite. Wählen Sie eine Breite, die für das erwartete Vorzeichen, die Ziffern, das Dezimaltrennzeichen und die Nachkommastellen ausreicht.

Mit printf formatieren

C++-Programme können auch printf aus <cstdio> verwenden. In der Formatzeichenfolge gibt %.2f einen Gleitkommawert mit zwei Nachkommastellen aus. Ändern Sie die 2, um eine andere Anzahl festzulegen.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

#include <cstdio>

int main() {
    const double value = 1.41421;
    std::printf("Number with two decimal places: %.2f\n", value);
}
Number with two decimal places: 1.41

Bei printf ist %f die Konvertierung für einen Gleitkommawert vom Typ double. Formatangabe und Argumenttyp müssen zusammenpassen; eine falsche Kombination kann undefiniertes Verhalten verursachen. Dieses Beispiel ist ein vollständiges C++-Programm und benötigt keine Stream-Header.

Zwischen C++-Streams und printf wählen

Verwenden Sie std::cout mit std::fixed und std::setprecision, wenn Sie die C++-Streamformatierung mit anderen Stream-Einfügungen kombinieren und den Typ jedes Werts beibehalten möchten. printf eignet sich, wenn Sie mit vorhandenen printf-Formatzeichenfolgen arbeiten oder diese Schreibweise praktischer finden. Beide Varianten sind in C++ gültig.

Für eine feste Anzahl von Nachkommastellen müssen Sie std::fixed mit std::setprecision kombinieren; der Genauigkeitsmanipulator allein hat im standardmäßigen Streamformat eine andere Bedeutung. Verwenden Sie std::setw und std::setfill, wenn Spalten aufgefüllt werden sollen. Wenden Sie std::setw vor jedem Wert erneut an, da die festgelegte Breite nur einmal gilt.