Zahlen als Ausgabe darzustellen ist eine interessante und wichtige Aufgabe beim Schreiben eines Programms in einer beliebigen Sprache. Bei ganzzahligen Typen (Daten vom Typ kurz, lang oder mittel) ist es einfach, Zahlen als Ausgabe darzustellen. Bei Gleitkommazahlen (Float- oder Double-Typ) müssen wir sie manchmal auf eine bestimmte Anzahl von Dezimalstellen runden. Wenn wir beispielsweise 52,24568 mit drei Dezimalstellen darstellen möchten, ist eine gewisse Vorverarbeitung erforderlich. In diesem Artikel stellen wir verschiedene Techniken vor, um Gleitkommazahlen durch Runden auf eine bestimmte Anzahl von Dezimalstellen darzustellen.
Unter den verschiedenen Methoden ist es wichtig, eine C-ähnliche Formatzeichenfolge zu verwenden, das Präzisionsargument zu verwenden und die Funktion „round()“ aus der Mathematikbibliothek zu verwenden. Schauen wir sie uns einzeln an. Mit korrekter Syntax und Codebeispielen.
In der Sprache C verwenden wir die Funktion printf(), um das Drucken mit Format darzustellen. Um die Funktion printf() zum Anzeigen einiger Daten zu verwenden, müssen Sie im Voraus die Formatzeichenfolge angeben. Die gleiche printf()-Funktion funktioniert auch in C++. Um eine Zahl mit einer bestimmten Anzahl an Dezimalstellen darzustellen, würde die Formatierungssyntax wie folgt aussehen
Syntax der printf-Anweisung.
printf ( “%.<number of decimal place>f”, <floating point number> );
Wenn wir beispielsweise eine Gleitkommavariable NUM mit 4 Dezimalstellen anzeigen möchten, sieht die Anweisung wie folgt aus -
printf ( “%.4f”, NUM );
#include <iostream> using namespace std; void solve( float number) { printf ( "%.3f", number ); } int main(){ cout << "Number 45.278586 up to 3 decimal places: "; solve( 45.278586 ); }
Number 45.278586 up to 3 decimal places: 45.279
In diesem Beispiel können wir sehen, dass die angegebene Zahl 6 Dezimalstellen hat. Aber wir zeigen nur bis auf 3 Dezimalstellen an. Und beim Runden automatisch in den nächstliegenden Wert umgerechnet. Dieses Verfahren weist jedoch einen Nachteil auf. Wir können den Dezimalstellenwert zu keinem Zeitpunkt dynamisch ändern. Um dieses Problem zu lösen, können wir einen anderen Ansatz wählen und die C++-basierte setprecision()-Methode verwenden.
C++ verfügt über eine spezielle Formatierungsfunktion namens setprecision(), mit der der Genauigkeitswert auf bis zu n Dezimalstellen festgelegt wird. Um diese Methode verwenden zu können, müssen wir die iomanip-Bibliothek importieren. Es muss auch angegeben werden, dass wir eine feste Anzahl von Dezimalstellen verwenden. Die Syntax lautet wie folgt:
Definieren Sie die Methode „set precision()“
include <iomanip> std::cout << std::fixed; std::cout << std::setprecision( <number of decimal places> ); std::cout << The_floating_point_number;
Wenn wir beispielsweise eine Gleitkommavariable NUM mit 4 Dezimalstellen anzeigen möchten, sieht die Anweisung wie folgt aus -
include <iomanip> std::cout << std::fixed; std::cout << std::setprecision( 4 ); std::cout << NUM;
#include <iostream> #include <iomanip> using namespace std; void solve( float number, int place) { cout << fixed; cout << setprecision( place ); cout << number << endl; } int main(){ cout << "Number 45.278586 up to 3 decimal places: "; solve( 45.278586, 3); cout << "Number 45.278586 up to 4 decimal places: "; solve( 45.278586, 4); cout << "Number 45.278586 up to 5 decimal places: "; solve( 45.278586, 5); }
Number 45.278586 up to 3 decimal places: 45.279 Number 45.278586 up to 4 decimal places: 45.2786 Number 45.278586 up to 5 decimal places: 45.27859
Dies ist eine ideale Möglichkeit, n Nachkommastellen darzustellen. Wenn n = 0 ist, können wir manchmal eine andere Methode zum Runden verwenden. Dadurch wird die Zahl in eine Ganzzahl umgewandelt. Die spezifische Methode ist wie folgt: −
Die „cmath“-Bibliothek verfügt über eine Round()-Methode, um eine Zahl in ihre nächste ganze Zahl umzuwandeln. Dies ist also die Umwandlung einer Gleitkommazahl in 0 Dezimalstellen. Die Syntax ist wie folgt.
Verwenden Sie die Methode „round()“
include <cmath> float res = round ( <floating point number> );
Wenn wir beispielsweise die Zahl 45,254 auf die nächste ganze Zahl runden wollten, würde die Anweisung wie folgt aussehen.
include <cmath> float res = round ( 45.254 ); std::cout << res;
#include <iostream> #include <cmath> using namespace std; void solve( float number) { float res; res = round ( number ); cout << res << endl; } int main(){ cout << "Number 45.278586 to its nearest integer: "; solve( 45.278586 ); cout << "Number 89.7854 to its nearest integer: "; solve( 89.7854 ); cout << "Number -45.69 to its nearest integer: "; solve( -45.69 ); }
Number 45.278586 to its nearest integer: 45 Number 89.7854 to its nearest integer: 90 Number -45.69 to its nearest integer: -46
In diesem Beispiel ist es offensichtlich, dass die Verwendung der Funktion „round()“ die geeignete und einfache Möglichkeit ist, eine Gleitkommazahl in die nächste ganze Zahl umzuwandeln. Diese Funktion verwendet eine Zahl als Argument und gibt das Ganzzahläquivalent zurück. In unserem Beispiel haben wir eine negative Zahl -45,69 und nach dem Runden wird sie zu -46, was kleiner als die ursprüngliche Zahl ist. Die Methode „round()“ ist also nicht wie „floor()“ oder „ceil()“.
Wenn wir Code in C++ schreiben, gibt es nur wenige Möglichkeiten, Gleitkommazahlen mit bis zu n Dezimalstellen darzustellen. Die einfachste Möglichkeit ist die Verwendung der printf()-Methode und einer Formatzeichenfolge. Bei dieser Methode können die Dezimalstellen der Formatzeichenfolge jedoch nicht dynamisch geändert werden. Um dies zu bewältigen, verfügt die C++-Bibliothek iomanip über die Methode set precision(), die die Anzahl der Dezimalstellen zum Runden einer Gleitkommazahl ermittelt. Manchmal müssen wir eine Gleitkommazahl auf die nächste ganze Zahl (0 Dezimalstellen) runden. In diesem Fall können wir die Methode „round()“ aus der cmath-Bibliothek in C++ verwenden.
Das obige ist der detaillierte Inhalt vonC++-Programm zum Runden einer Zahl auf n Dezimalstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!