double in 0.8er Schritte runden



  • Hi!
    Ich soll double Werte in 0.8er Schritte runden. Also aus 4.6 würde 4.8 werden, aus 2.6 dann 2.4

    Die große Preisfrage, wie stelle ich das am besten an? Mein Ansatz:

    double round(const double& in)
    {
       double tmp = in/0.8;
       tmp = abs(tmp); // Vorzeichen entfernen
       tmp = tmp - (int)tmp; // Nur Nachkommastellen werden benötigt
    
       tmp = tmp*0.8; // Wert der abgezogen/aufaddiert werden muss
    
       if (in > 0.0)
          tmp = in - tmp;
       else
          tmp = in + tmp;
    
       return tmp;
    }
    

    Ehrlich gesagt finde ich das nicht nur hässlich, sondern es wird auch nicht unterschieden ob der Wert auf- bzw. abgerundet werden soll (tmp > 0.4 dann auf, andernfalls abrunden). Habt ihr Ideen?

    Merci



  • Was spricht denn gegen so etwas:

    inline long round(double x)
    {
      return static_cast<long>((x<0) ? (x-0.5) : (x+0.5));
    }
    
    void foo() {
      double x = 3.14159265;
      x = round(x*1.25)*0.8;
      //  ^^^^^^^^^^^^^
      // Eventuell lohnt es sich mit dieser Ganzzahl weiterzuarbeiten
    }
    

    ?



  • Ja das scheint zu funktionieren!

    Danke dir


Anmelden zum Antworten