Wie man die Set-Präzision in C++ verwendet

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die setprecision() Methode, um die benutzerdefinierte Präzision für Fließkommazahlen festzulegen
  2. Verwenden Sie setprecision() und std::fixed(), um die benutzerdefinierte Präzision für Fließkommazahlen festzulegen
  3. Verwenden Sie setprecision() und std::fixed(), um Fließkommazahlen auf einen Dezimalpunkt auszurichten
Wie man die Set-Präzision in C++ verwendet

Dieser Artikel wird mehrere Methoden zur Verwendung der setprecision-Methode in C++ demonstrieren.

Verwenden Sie die setprecision() Methode, um die benutzerdefinierte Präzision für Fließkommazahlen festzulegen

setprecision() ist Teil der Input/Output manipulators library <iomanip> und kann verwendet werden, um die Standardgenauigkeit der Fließkommazahlen zu modifizieren. setprecision() wird normalerweise in Ausdrücken mit I/O-Streams verwendet.

Das folgende Beispiel zeigt, wie die Genauigkeit von Fließkommazahlen für das cout-Ausgabestrom-Objekt eingestellt werden kann. Beachten Sie, dass sich setprecision() auf die ganze Zahl (ganzzahliger Teil und Bruchteil) bezieht und wissenschaftliche Notation verwendet, wenn Zahlen einen größeren Betrag als die angegebene Genauigkeit haben.

#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> d_vec = {123.231,       2.2343, 0.324,     0.012,
                          26.9491092019, 11013,  92.001112, 0.000000234};

  for (auto &i : d_vec) {
    cout << setprecision(3) << i << " | ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

123 | 2.23 | 0.324 | 0.012 | 26.9 | 1.1e+04 | 92 | 2.34e-07 |

Verwenden Sie setprecision() und std::fixed(), um die benutzerdefinierte Präzision für Fließkommazahlen festzulegen

Alternativ können wir setprecision() und fixed() Strommanipulatoren in Verbindung verwenden, um Fließkommawerte mit der gleichen Anzahl von Nachkommastellen zu drucken. Die fixed() Methode setzt den Bruchteil der Zahl auf eine feste Länge, die standardmäßig 6 Stellen beträgt. Im folgenden Code-Beispiel geben wir in den cout-Stream aus und rufen beide Manipulatoren auf, bevor die Zahl in die Ausgabe eingefügt wird.

#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> d_vec = {123.231,       2.2343, 0.324,     0.012,
                          26.9491092019, 11013,  92.001112, 0.000000234};

  for (auto &i : d_vec) {
    cout << fixed << setprecision(3) << i << " | ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

123.231 | 2.234 | 0.324 | 0.012 | 26.949 | 11013.000 | 92.001 | 0.000 |

Verwenden Sie setprecision() und std::fixed(), um Fließkommazahlen auf einen Dezimalpunkt auszurichten

Schließlich können wir die Manipulatoren setw, right, setfill, fixed und setprecision kombinieren, um Fließkommazahlen dezimal ausgerichtet auszugeben. Die Methode setw spezifiziert die Breite des Ausgabestroms mit der Anzahl der als Argument übergebenen Zeichen. setfill legt ein Zeichen fest, mit dem der ungenutzte Platz aufgefüllt wird, und die right Methode teilt cout die Seite mit, auf die der Füllvorgang angewendet wird.

#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> d_vec = {123.231,       2.2343, 0.324,     0.012,
                          26.9491092019, 11013,  92.001112, 0.000000234};

  for (auto &i : d_vec) {
    cout << std::setw(10) << std::right << std::setfill(' ') << fixed
         << setprecision(4) << i << endl;
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

  123.2310
    2.2343
    0.3240
    0.0120
   26.9491
11013.0000
   92.0011
    0.0000
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