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


Anmelden zum Antworten