python round - Arrondir à 5 (ou autre nombre) en python




7 Answers

Je ne connais pas de fonction standard en Python, mais cela fonctionne pour moi:

def myround(x, base=5):
    return int(base * round(float(x)/base))

Il est facile de voir pourquoi ce qui précède fonctionne. Vous voulez vous assurer que votre nombre divisé par 5 est un nombre entier, correctement arrondi. Donc, nous faisons d'abord exactement cela ( round(float(x)/5) ), et puis puisque nous avons divisé par 5, nous multiplions également par 5. La conversion finale en int est parce que round() retourne une valeur à virgule flottante dans Python.

J'ai rendu la fonction plus générique en lui donnant un paramètre de base , par défaut à 5.

up int

Y at-il une fonction intégrée qui peut arrondir comme ceci:

10 -> 10
12 -> 10
13 -> 15
14 -> 15
16 -> 15
18 -> 20



C'est juste une question d'échelle

>>> a=[10,11,12,13,14,15,16,17,18,19,20]
>>> for b in a:
...     int(round(b/5.0)*5.0)
... 
10
10
10
15
15
15
15
15
20
20
20



round (x [, n]): les valeurs sont arrondies au multiple le plus proche de 10 à la puissance moins n. Donc, si n est négatif ...

def round5(x):
    return int(round(x*2, -1)) / 2

Puisque 10 = 5 * 2, vous pouvez utiliser la division entière et la multiplication avec 2, plutôt que la division flottante et la multiplication avec 5.0. Pas que cela ait beaucoup d'importance, à moins que vous ne préfériez changer de bit

def round5(x):
    return int(round(x << 1, -1)) >> 1



Désolé, je voulais commenter la réponse d'Alok Singhai, mais elle ne me le laissera pas en raison d'un manque de réputation = /

Quoi qu'il en soit, nous pouvons généraliser une étape de plus et aller:

def myround(x, base=5):
    return base * round(float(x) / base)

Cela nous permet d'utiliser des bases non entières, comme .25 ou toute autre base fractionnaire.




def round_to_next5(n):
    return n + (5 - n) % 5



Et ça:

 def divround(value, step):
     return divmod(value, step)[0] * step



Vous pouvez "tromper" int() en arrondissant au lieu d'arrondir vers le bas en ajoutant 0.5 au nombre que vous passez à int() .




Related

python rounding