Werte runden



  • HI
    kurze frage:
    wie kann ich eine variable vom typ double,mit dem wert z.B. 0.003 genau auf null runden? und wie kann man prüfen dass die zwei stellen nach dem komma auch null sind?
    dankeschön schonma 🙂
    MfG Bl1nk182



  • runder ist leicht:

    du berechnest den integer der Zahl und ziehst den von der Zahl ab, jetzt schaust du ob das Ergebnis >= 0.5 ist

    double zahl = 3.534;

    if(zahl - (double)(int)zahl >= 0.5)
    {
    // aufrunden
    zahl = (double)(int)zahl +1;
    }
    else
    {
    // abrunden
    zahl = (double)(int)zahl;
    }

    natürlich kannst du das noch optimieren.

    das mit den Nullen ist schwieriger:

    double zahl = 3.678;
    int zahl2 = (int)(zahl * 10);
    zahl2 -= (int)zahl*10

    da kann man schön bestauen was Klammern für ne Wirkung haben^^

    das gibt dir die 1. Nachkommastelle aus, 100 die 2., 1000 die 3. und so weiter

    EDIT:

    PS: erbitte Feetback obs funktioniert 😃



  • sry,dass ich mich gestern nich mehr gemeldet hab,ging nich mehr 😣
    dein kleines prog tuts aber 😃
    dankeschön 👍



  • if(zahl - (double)(int)zahl >= 0.5)
    {
      zahl = (double)(int)zahl +1;
    }
    else
    {
      zahl = (double)(int)zahl;
    }
    

    =>

    zahl= (int)(zahl+0.5);
    


  • das ganze jetzt noch mit reinterpret_cast und es schaut sogar noch hübsch aus



  • ESS_CB schrieb:

    du berechnest den integer der Zahl und ziehst den von der Zahl ab, jetzt schaust du ob das Ergebnis >= 0.5 ist

    Das klappt aber nur mit Werten, die in den Wertebereich von int passen. Das sind bei weitem nicht alle.



  • kk 😃



  • Bl1nk182 schrieb:

    wie kann ich eine variable vom typ double,mit dem wert z.B. 0.003 genau auf null runden? und wie kann man prüfen dass die zwei stellen nach dem komma auch null sind?

    Hallo Bl1nk182

    Runden geht mit dem Ausdruck

    #include <cmath> // std::floor
    double z = 0.003;
    double zGerundet = std::floor( z + 0.5 );
    

    funktioniert für positive und negative Zahlen.
    Hier ganz unten auf der Seite steht's und da steht auch, dass man floor die 'Gauß-Klammer' nennt.

    Falls Du das Runden für eine Ausgabe (std::cout) benötigst, solltest Du gar nicht (!) runden, sondern std::setprecision und std::fixed benutzen, um die von Dir gewünschte Anzahl der Nachkommastellen zu erreichen.

    Gruß
    Werner


Anmelden zum Antworten