Double-Zahl runden
-
Hallo,
ich habe in einem Moderatorenbeitrag folgende Methode gefunden, um double-Werte zu Runden, nämlich:
double Round(double Zahl, unsigned int Stellen) { Zahl *= pow(10, Stellen); if (Zahl >= 0) floor(Zahl + 0.5); else ceil(Zahl - 0.5); Zahl /= pow(10, Stellen); return Zahl; }Allerdings wird bei mir der Wert nicht gerundet. Ich habe eine double-Variable mit einem Wert von -9.2559631349317831e+061. Und dieser bleibt immer bestehen, auch wenn ich diesen mit der Funktion runden will! Woran kann das liegen?

-
Zum Beispiel:
double alteZahl = 5.9999999999997; double neueZahl = Round(alteZahl, 1);Dann steht in neueZahl dann 5.9999999999996998, aber ich würde eigentlich erwarten, dass dort 6.0 stehen sollte! Wo ist mein Denkfehler?
-
So müsste es jetzt gehen... Der Unterschied ist, dass du den Rückgabewert von floor/ceil einfach verworfen hast, anstatt ihn an Zahl zuzuweisen... Das mit den zusätzlichen geschweiften Klammern ist nicht nötig, aber IMO besserer Stil.
double Round(double Zahl, unsigned int Stellen) { Zahl *= pow(10, Stellen); if (Zahl >= 0) { Zahl = floor(Zahl + 0.5); } else { Zahl = ceil(Zahl - 0.5); } Zahl /= pow(10, Stellen); return Zahl; }Felix