float Anzahl Stellen vor Komma
-
Hallo,
wie kann man die Anzahl der Stellen vor dem Komma eines floats bekommen? Wie kann man einen float auf n Nachkommastellen runden?
Danke!
-
Die Anzahl der Vorkommastellen erhält man mit
int vk = int( log10( abs( zahl ) ) ) + 1; // erfordert #include <cmath>Runden beim Ausgeben von Fließkommazahlen kann man mit den Manipulatoren fixed und setprecision - z.B.:
double pi = acos( -1.0 ); // erfordert #include <cmath> cout << fixed << setprecision(4); // 4 Nachkommastellen für alle Fließkommazahlen cout << "Pi = " << setw(8) << pi << endl;erfordert #include <iomanip>
Gruß
Werner
-
Sowas?
a) 10.1635 -> 2 Stellen vor dem Komma
b) 10.1635 runden auf 3 Stellen -> 10.164a) float f = 10.1635; int i = static_cast<int>(f);Nun hat sich das Problem darauf reduziert festzustellen, wieviel Stellen eine Integerzahl hat. Sukzessives anwenden von div 10 ( / 10) sollte das gewueschte erziehlen.
b) float f = 10.1635; float r = static_cast<float>( static_cast<int>(f * 10^3 + 0.5) );Das rundet die gegebene float-Zahl auf 3 Stellen nach dem Komma. Es ist leicht auf n zu verallgemeinern. Auch solltest du bei negativen Zahlen aufpassen und entsprechend dein Programm anpassen.
-
Ich habe mal die Forensuche bemueht und ueberraschend viele Treffer erhalten. Solltest du auch machen!

-
knivil schrieb:
a) float f = 10.1635; int i = static_cast<int>(f);[...]
b) float f = 10.1635; float r = static_cast<float>( static_cast<int>(f * 10^3 + 0.5) );Diese beiden Code-Stücke funktionieren nur selten korrekt. Beide gehen schief, sobald die Fließkomma-Zahl zu groß ist für einen int, was schnell vorkommt.
-
knivil schrieb:
Ich habe mal die Forensuche bemueht und ueberraschend viele Treffer erhalten. Solltest du auch machen!

Kurze Frage dazu:
Mit welchen Suchbegriffen denn? Versuche es nämlich auch gerade, leider nur mit mäßigem Erfolg!
Ciao
-
@knivil
Dein Rundungscode ist falsch. Schau bitte nochmal nach was der operator ^ macht (jedenfalls keine Potenzierung).
-
Um zu runden, kann man die Funktionen
floor()undceil()aus<cmath>verwenden. Bei Bedarf passt man die Zahl durch Multiplikation/Division mit Zehnerpotenzen vorher und nachher an.
-
Schau bitte nochmal nach was der operator ^ macht (jedenfalls keine Potenzierung)
Ja genau und das b) im Code funktioniert so auch nicht etc. ... Ich bin net bloed.Eigentlich sollte es 10 hoch 3 oder allgemeiner 10 hoch x ausdruecken, aber du kannst es auch gern als copy-paste-Sperre interpretieren.