2015-04-10 12 views
11

Gibt es einen idiomatischen Weg, um das nächste Vielfache einer Zahl zu runden, kurz vor dem Runden nach oben und nach unten und nach dem nächsten?Rund zum nächsten Vielfachen einer Zahl

Nehmen wir nur ganze Zahlen:

number multiple result 
12  5   10 
13  5   15 
149  10   150 
+1

Wenn Sie (floor) auf das nächste Vielfache abrunden können, fügen Sie einfach 'multiple/2' zur Eingabe hinzu und jetzt haben Sie eine runde Funktion. Wenn Sie möchten, dass es in einigen Fällen aufrundet, fügen Sie stattdessen 'ceil (multiple/2)' 'hinzu. – VoidStar

+0

@VoidStar Ich möchte nicht aufrunden. –

+0

Sie müssen jedoch eine Tie-Breaker-Richtlinie auswählen. Wie runden Sie 15 mit 6 als Multiple ab? Du gehst entweder runter oder hoch. Ich gab dir einen Weg, beides zu tun. Die folgenden Antworten zeigen in diesem Fall nur eine Abrundung, da sie die Option "multiple/2" auswählen. Obwohl manche sogar Banker bevorzugen. – VoidStar

Antwort

16

Hälfte des Mehrfach hinzufügen, dann abrunden.

result = ((number + multiple/2)/multiple) * multiple; 

oder

result = number + multiple/2; 
result -= result % multiple; 

Diese abrundet, wenn die Zahl genau in der Mitte. Möglicherweise müssen Sie die Berechnung optimieren, wenn Sie in diesem Fall ein anderes Verhalten wünschen. Achten Sie auch auf Überlauf, wenn number in der Nähe des oberen Bereichs des Typs liegen kann.

+0

Genau das habe ich gemacht. Danke für die Bestätigung, ich denke auch, es sieht gut aus und macht den Job. –