Bug im FAQ Eintrag zum Thema Runden?
-
Hi,
ich habe mir mal folgenden Code aus dem FAQ geschnappt:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39342.htmlund wollte auf die 7. Stelle PI Runden, doch mir fiel auf das dies mit der dort gebotenen Funktion gar nicht geht? Es wird nur bis zur 5. Stelle gerundet höher geht jedoch nicht?
Hier mein Code
#include <iostream> #include <cmath> inline const double Round (double value, unsigned int pos) { static const double v[] = { 1, 10, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9 }; return (floor(value * v[pos] + 0.5) / v[pos]); } double PI = 3.1415926535897932384626433832795; int main (void) { std::cout << Round (PI, 7); std::cin.get(); return 0; }
Wieso kann ich nicht über die 5. Stelle hinaus gehen?
-
Das liegt wohl an der Präzision von cout. Ich glaube, die ist standardmäßig auf 6 gesetzt und rundet deine doubles vor der Ausgabe also auch nochmal. Verändern kannst du die Ausgabepräzision von Gleitkommazahlen wie folgt:
#include <iomanip> ------------------ std::cout << setprecision(10);
-
Danke! Daran lags