HOWTO · C++

Runden von Fließkommazahlen auf 2 Dezimalstellen in C++

Dieser Artikel zeigt, wie Gleitkommazahlen in C++ auf 2 Dezimalstellen gerundet werden

Auf dieser Seite

In diesem Artikel werden verschiedene Methoden zum Runden von Gleitkommazahlen auf 2 Dezimalstellen in C++ erläutert.

Verwenden der Formatangaben der Funktion printf zum Runden von Fließkommazahlen auf 2 Dezimalstellen in C++

Gleitkommazahlen haben eine spezielle binäre Darstellung, was bedeutet, dass reelle Zahlen von den Maschinen nicht genau dargestellt werden können. Daher ist es üblich, auf Rundungsfunktionen zurückzugreifen, wenn die Gleitkommazahlen bearbeitet und berechnet werden. In diesem Fall müssen wir jedoch nur einen bestimmten Teil des Bruchteils der Zahlen ausgeben.

Die erste Lösung besteht darin, die Funktion printf zu verwenden, um formatierten Text in den Stream stdout auszugeben. Beachten Sie, dass der reguläre Formatbezeichner für die float-Nummern - %f in %.2f geändert werden sollte. Die letztere Notation stellt sicher, dass nur 2 Dezimalstellen von der Zahl gedruckt werden, und führt gleichzeitig die Rundung gemäß den allgemeinen mathematischen Regeln durch. Beachten Sie jedoch, dass eine ähnliche Notation mit Formatspezifizierern anderer Datentypen verwendet werden kann.

#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    printf("%.2f; ", item);
  }

  return EXIT_SUCCESS;
}

Ausgabe:

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;

Verwenden von fprintf-Funktionsformatspezifikatoren zum Runden von Fließkommazahlen auf 2 Dezimalstellen in C++

fprintf ist eine weitere Funktion, mit der die Ausgabeformatierung wie der Aufruf printf ausgeführt werden kann. Außerdem kann sie in jedes Stream-Objekt FILE* schreiben, das als erstes Argument übergeben werden kann. Im folgenden Beispiel wird das Drucken im Stream stderr demonstriert, einer ungepufferten Version von stdout für die Fehlerberichterstattung und Protokollierung.

#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    fprintf(stderr, "%.2f; ", item);
  }

  return EXIT_SUCCESS;
}

Ausgabe:

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;

Verwenden von std::setprecision und std::fixed zum Runden von Fließkommazahlen auf 2 Nachkommastellen in C++

Alternativ kann die Funktion std::setprecision aus der Bibliothek der E / A-Manipulatoren in Verbindung mit std::fixed verwendet werden. Letzteres wird verwendet, um die Standardformatierung für Gleitkomma-Eingabe- / Ausgabeoperationen zu ändern. Wenn wir es zusammen mit std::setprecision verwenden, ist das Ergebnis eine feste Genauigkeit der reellen Zahlen, und die Genauigkeit kann mit dem an std::setprecision selbst übergebenen Ganzzahlargument angegeben werden.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::fixed;
using std::setprecision;
using std::vector;

int main() {
  vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    cout << setprecision(2) << fixed << item << "; ";
  }

  return EXIT_SUCCESS;
}

Ausgabe:

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;