Runden



  • Hallo,

    dieser Code gibt als Ergebnis 23.456 aus. Warum rundet er nicht auf 2 Stellen ?
    Zudem will ich bei d = 2.4 als Ergebnis 2.40 bekommen ..?

    #include <iostream.h>
    #include <conio.h>
    
    #include <math.h>
    
    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;
    }
    
    void main()
    {
       double d = 23.456;
       cout << Round(d, 2);
       getch();
    }
    


  • floor() und ceil() ändern nicht den übergebenen Parameter, sondern geben den Wert als return zurück. Also:

    #include <iostream.h>
    #include <conio.h>
    
    #include <math.h>
    
    double Round(double Zahl, unsigned int Stellen)
    {
        Zahl *= pow(10, Stellen);
        if (Zahl >= 0.0) Zahl=floor(Zahl + 0.5); //geändert
        else Zahl=ceil(Zahl - 0.5);              //geändert
        Zahl /= pow(10, Stellen);
        return Zahl;
    }
    
    void main()
    {
       double d = 23.456;
       cout << Round(d, 2);
       getch();
    }
    

    [ Dieser Beitrag wurde am 14.04.2003 um 14:20 Uhr von CodeWalker editiert. ]



  • hier gibts einen thread in der faq
    Runden

    und nutz mal die suchfunktion, dimah hat dazu noch was gepostet gehabt, glaub ich



  • Aus diesem FAQ-Beitrag habe ich den Code entnommen.

    Nach der Änderung geht es, nur 4.3 liefert leider noch nicht 4.30



  • da müssen dann die format flags dran.

    bin mir nicht ganz sicher, welche .. (schau mal nach)
    auf jeden geht es so..

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main(){
        double test=2.3;
        cout<<test<<endl; //nicht mit der 0
        cout.setf(ios::fixed | ios::showpoint, ios::floatfield | ios::scientific);
        cout.precision(2);
        cout<<test<<endl; //jetzt mit
    }
    


  • hier ist etwas ausführlicher http://cplus.kompf.de/artikel/stream2.html


Anmelden zum Antworten