Um eine Zahl n auf irgend ein Raster r zu runden (z.B. 3. Kommastelle, ganze oder gerade Zahlen, 0.5-Schritte usw.), kann folgende Formel verwendet werden:
ngerundet= r * floor[(n + r/2) / r]
floor rundet eine Kommazahl auf die nächst kleinere Ganzzahl ab (auch neg. Zahlen). 3.3 -> 3, -5.2 -> -6 usw.
Beispiele:
4.7 soll auf ganze Zahlen gerundet werden (r = 1):
ngerundet = 1 * floor[(4.7 + 0.5) / 1] = 5
4.739999 soll auf 3 Kommastellen gerundet werden (r = 0.001):
ngerundet = 0.001 * floor[(4.739999 + 0.0005) / 0.001] = 4.74
-2.5 soll auf ganze Zahlen gerundet werden (r = 1):
ngerundet = 1 * floor[(-2.5 + 0.5) / 1] = -2
-3.7 soll auf gerade Zahlen gerundet werden (r = 2):
ngerundet = 2 * floor[(-3.7 + 1) / 2] = -4
Wenn keine Abrunde-Funktion zur Verfügung steht, kann die Int-Funktion verwendet werden. Jedoch muss dann für neg. Zahlen eine Spezialbehandlung gemacht werden.
r * int[(n + r/2) / r] (n >= 0) | |
ngerundet= | |
r * int[(n + D + r/2) / r] - D (n < 0) |
wobei D = int(|n|/r + 1) * r
int bedeutet, dass nur der Ganzzahlanteil interessiert, d.h. dem Resultat wird der Nachkommateil abgeschnitten.
Mit dem Offset D werden negative Zahlen in den positiven Bereich gehoben. Darauf wird dann die Formel für positive n angewendet und der Offset wieder abgezogen.
Der Offset ist nötig, weil sonst für negative Zahlen r/2 auf die nächst kleinere Zahl gerundet würde.
Die Formel für neg. n gilt auch für pos. n, ist aber komplizierter.
Beispiele:
4.7 soll auf ganze Zahlen gerundet werden (r = 1):
ngerundet = 1 * int[(4.7 + 0.5) / 1] = 5
6.8 soll auf gerade Zahlen gerundet werden (r = 2):
ngerundet = 2 * int[(6.8 + 1) / 2] = 6
2.6 soll auf Fünferzahlen gerundet werden (r = 5):
ngerundet = 5 * int[(2.6 + 2.5) / 5] = 5
5.3 soll auf 0.5er Schritte gerundet werden (r = 0.5):
ngerundet = 0.5 * int[(5.3 + 0.25) / 0.5] = 5.5
-2.5 soll auf ganze Zahlen gerundet werden (r = 1):
D = int(2.5 / 1 + 1) * 1 = 3
ngerundet = 1 * int[(-2.5 + 3 + 0.5) / 1] - 3 = -2
-3.7 soll auf gerade Zahlen gerundet werden (r = 2):
D = int(3.7 / 2 + 1) * 2 = 4
ngerundet = 2 * int[(-3.7 + 4 + 1) / 2] - 4 = -4