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.4Die 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