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

Jinku Hu 12 Oktober 2023
  1. Verwenden der Formatangaben der Funktion printf zum Runden von Fließkommazahlen auf 2 Dezimalstellen in C++
  2. Verwenden von fprintf-Funktionsformatspezifikatoren zum Runden von Fließkommazahlen auf 2 Dezimalstellen in C++
  3. Verwenden von std::setprecision und std::fixed zum Runden von Fließkommazahlen auf 2 Nachkommastellen in C++
Runden von Fließkommazahlen auf 2 Dezimalstellen in C++

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;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ Float