Heim > Backend-Entwicklung > C++ > Warum zeigt „std::cout.precision()' keine nachgestellten Nullen in Gleitkommazahlen in C an?

Warum zeigt „std::cout.precision()' keine nachgestellten Nullen in Gleitkommazahlen in C an?

Barbara Streisand
Freigeben: 2024-11-10 11:41:03
Original
762 Leute haben es durchsucht

Why doesn't `std::cout.precision()` display trailing zeros in floating-point numbers in C  ?

Korrekte Verwendung von std::cout.precision() zur Anzeige nachgestellter Nullen

Bei der Arbeit mit Gleitkommazahlen in C wird die Die Methode std::cout.precision() ist entscheidend für die Steuerung der Anzahl der angezeigten Dezimalstellen. In bestimmten Fällen stoßen Benutzer jedoch auf unerwartete Ergebnisse, z. B. das Fehlen abschließender Nullen.

Bedenken Sie den folgenden Code:

int main() {
  int a = 5;
  int b = 10;
  std::cout.precision(4);
  std::cout << (float)a / (float)b << "\n";
  return 0;
}
Nach dem Login kopieren

Dieser Code versucht, das Ergebnis der Division zweier Ganzzahlen auszugeben (5 und 10) mit einer Genauigkeit von 4 Dezimalstellen. Allerdings ist die Ausgabe „0,5“ statt der erwarteten „0,5000“.

Der Grund für dieses Verhalten liegt darin, dass die Zahlen „a“ und „b“ zunächst als Ganzzahlen gespeichert werden. Wenn wir die Division durchführen, ist das Ergebnis standardmäßig ebenfalls eine Ganzzahl. Um Gleitkommazahlen korrekt anzuzeigen, müssen wir sie explizit in Gleitkommazahlen umwandeln, wie in der Zeile zu sehen ist:

std::cout << (float)a / (float)b << "\n";
Nach dem Login kopieren

Aber auch nach der Umwandlung in Gleitkommazahlen bleibt das Fehlen nachfolgender Nullen bestehen. Hier kommt der Manipulator std::fixed ins Spiel. Um sicherzustellen, dass nachgestellte Nullen angezeigt werden, müssen wir den Manipulator std::fixed an std::cout übergeben. Dieser Manipulator rundet den Gleitkommawert und zeigt ihn in Festkomma-Notation an.

Der korrigierte Code lautet:

int main() {
  int a = 5;
  int b = 10;
  std::cout << std::fixed;
  std::cout.precision(4);
  std::cout << (float)a / (float)b << "\n";
  return 0;
}
Nach dem Login kopieren

Mit der Einbeziehung von std::fixed ist die Ausgabe jetzt korrekt zeigt „0,5000“ an, wobei die angegebene Genauigkeit von 4 Dezimalstellen eingehalten wird.

Das obige ist der detaillierte Inhalt vonWarum zeigt „std::cout.precision()' keine nachgestellten Nullen in Gleitkommazahlen in C an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage