Runden auf zwei Stellen nach dem Komma



  • Moin möchte float auf zwei Stellen nach dem Komma runden. rund(x) Runden nur auf ganze Zahlen oder?



  • float f = 10.025;
    
    int i = f*100;
    
    f = i/100.0f;
    

    alles klar ?



  • Hallo,
    ein Blick in die FAQ ist meist gut investierte Zeit:
    Runden



  • @HumeSikkins
    Leider ist die Funktion etwas falsch. Auch wenn ich der Meinung bin, dass die Forumuser auch ein wenig nachdenken sollen, so sollte in der FAQ trotzdem der richtige Code stehen 😉

    Was zu ändern wäre:

    // Original:

    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;
    }
    // 1. Änderung ohne Kommentar
    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;
    }
    // 2. Änderung: Einführen der Potenzgesetze
    double Round(double Zahl, 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;
    }
    // 3. Änderung: Rundung überarbeitet
    double Round(double Zahl, int Stellen)
    {
        Zahl *= pow( 10, Stellen);
        Zahl = floor(Zahl + 0.5)
        Zahl *= pow(10, -Stellen);
        return Zahl;
    }
    // 4. Änderung: Zusammenfassen
    double Round(double Zahl, int Stellen)
    {
        return floor(Zahl * pow( 10, Stellen) + 0.5) * pow(10, -Stellen);
    }
    // 5. Änderung: Laufzeitverhalten verbessern
    double Round(double Zahl, int Stellen)
    {
        double v[] = { 1, 10, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8 };  // mgl. verlängern
        return floor(Zahl * v[Stellen] + 0.5) / v[Stellen];
    }
    

    [ Dieser Beitrag wurde am 20.06.2003 um 14:14 Uhr von RenéG editiert. ]



  • @HumeSikkins
    Nachtrag:
    'tschludigung, sollte die Änderungen doch lieber an Shade weiterleiten



  • Gibt es da auch irgendeine Begründung zu? Warum war der ursprüngliche Code fehlerhaft?


Anmelden zum Antworten