Runden Sie JEDE Zahl nach oben / unten auf ein beliebiges Intervall
Mit dem Modulo-Operator können Sie Zahlen einfach auf ein bestimmtes Intervall runden %%
.
Die Funktion:
round.choose <- function(x, roundTo, dir = 1) {
if(dir == 1) { ##ROUND UP
x + (roundTo - x %% roundTo)
} else {
if(dir == 0) { ##ROUND DOWN
x - (x %% roundTo)
}
}
}
Beispiele:
> round.choose(17,5,1) #round 17 UP to the next 5th
[1] 20
> round.choose(17,5,0) #round 17 DOWN to the next 5th
[1] 15
> round.choose(17,2,1) #round 17 UP to the next even number
[1] 18
> round.choose(17,2,0) #round 17 DOWN to the next even number
[1] 16
Wie es funktioniert:
Der Modulo-Operator %%
bestimmt den Rest der Division der ersten Zahl durch die zweite. Das Hinzufügen oder Subtrahieren dieses Intervalls zu Ihrer interessierenden Anzahl kann die Zahl im Wesentlichen auf ein Intervall Ihrer Wahl "runden".
> 7 + (5 - 7 %% 5) #round UP to the nearest 5
[1] 10
> 7 + (10 - 7 %% 10) #round UP to the nearest 10
[1] 10
> 7 + (2 - 7 %% 2) #round UP to the nearest even number
[1] 8
> 7 + (100 - 7 %% 100) #round UP to the nearest 100
[1] 100
> 7 + (4 - 7 %% 4) #round UP to the nearest interval of 4
[1] 8
> 7 + (4.5 - 7 %% 4.5) #round UP to the nearest interval of 4.5
[1] 9
> 7 - (7 %% 5) #round DOWN to the nearest 5
[1] 5
> 7 - (7 %% 10) #round DOWN to the nearest 10
[1] 0
> 7 - (7 %% 2) #round DOWN to the nearest even number
[1] 6
Aktualisieren:
Die praktische Version mit zwei Argumenten:
rounder <- function(x,y) {
if(y >= 0) { x + (y - x %% y)}
else { x - (x %% abs(y))}
}
Positive y
Werte roundUp
, während negative y
Werte roundDown
:
# rounder(7, -4.5) = 4.5, while rounder(7, 4.5) = 9.
Oder....
Funktion, die UP oder DOWN basierend auf Standardrundungsregeln automatisch rundet :
Round <- function(x,y) {
if((y - x %% y) <= x %% y) { x + (y - x %% y)}
else { x - (x %% y)}
}
Rundet automatisch auf, wenn der x
Wert >
zwischen den nachfolgenden Instanzen des Rundungswerts liegt y
:
# Round(1.3,1) = 1 while Round(1.6,1) = 2
# Round(1.024,0.05) = 1 while Round(1.03,0.05) = 1.05