In c++ auf die zweite Kommastelle runden?
Hey, Ich lerne seit ungefähr 2-3 Wochen c++ in meiner Berufsschule und wir sollten jetzt mehrere Übungsaufgaben machen. Ich habe unten mal einen Screenshot beigefügt damit ihr euch ein kurzes Bild machen könnt. Ich will, dass die Rechnung in der 122 Zeile bis auf die zweite nachkommastelle ausgegeben wird. Wenn ich es mit ceil() versuche rundet er ja aber auf keine nachkommastelle. Jemand eine Idee wie ich das lösen kann? eventuell auch mit kleiner Erklärung da ich wie man sieht noch extrem am Anfang bin hahaha : )
7 Antworten
Ganz einfach:
Ist x die zu rundende Zahl, druckt man (x+0.5) aus mit nur 2 Dezimalstellen nach dem Komma:
print( "%.2f", x+0.5 );
Teste es, denn es könnte sein, dass vielleicht sogar schon print() korrekt rundet, also nicht nur unerwünsche Dezimalstellen einfach weglässt.
print( "%.2f", x );
std::cout << std::fixed;
std::cout.precision(2);
//std::cout << std::setprecision(2) << std::fixed;
std::cout <<....
Kannst Du als Anhaltspunkt fürs nachschlagen nutzen.
Du kannst die Ausgabe von Werten „manipulieren“:
#include <iomanip>
...
std::cout << "Das Schwimmbad ist zu "
<< "std::setprecision(2)
<< calculation2/calculation1*100
<< % gefüllt";
siehe Doku.
Nutze das:
floor( calc2/calc1 * 100.0 + .5 ) / 10000
Ja vertippt... muss natürlich so heißen:
floor( calc2/calc1 * 10000.0 + .5 ) / 100.0
Aber das hast du ja längst selber rausgefunden :)
Wenn du einfach nur die Ausgabe runden willst, kannst du (wie andere ja schon geschrieben haben) mit
std::setprecision(2)
den ausgegebenen Text runden.
Wenn du aber mit der gerundeten Zahl weiter rechnen willst, kann ich dir diese Hilfsfunktion empfehlen:
#include <cmath>
float round(float value, int precision)
{
float multiplier = std::pow(10, precision);
return (float)((int)(value * multiplier + 0.5f))/multiplier;
}
Beispiel:
0.0014 Prozent ist aber falsch .