Arrondir N'IMPORTE QUEL nombre haut / bas à N'IMPORTE QUEL intervalle
Vous pouvez facilement arrondir les nombres à un intervalle spécifique à l'aide de l' opérateur modulo %%
.
La fonction:
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)
}
}
}
Exemples:
> 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
Comment ça fonctionne:
L'opérateur modulo %%
détermine le reste de la division du premier nombre par le deuxième. Ajouter ou soustraire cet intervalle à votre nombre d'intérêt peut essentiellement «arrondir» le nombre à un intervalle de votre choix.
> 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
Mettre à jour:
La version pratique à 2 arguments:
rounder <- function(x,y) {
if(y >= 0) { x + (y - x %% y)}
else { x - (x %% abs(y))}
}
y
Valeurs positives roundUp
, tandis que y
valeurs négatives roundDown
:
# rounder(7, -4.5) = 4.5, while rounder(7, 4.5) = 9.
Ou....
Fonction qui arrondit automatiquement HAUT ou BAS selon les règles d'arrondi standard:
Round <- function(x,y) {
if((y - x %% y) <= x %% y) { x + (y - x %% y)}
else { x - (x %% y)}
}
Arrondit automatiquement si la x
valeur est à >
mi - chemin entre les instances suivantes de la valeur d'arrondi 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