250 votes

Arrondir à 5 (ou un autre nombre) en python

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
 

461voto

Alok Singhal Points 33073

Je ne sais pas d'une fonction standard de Python, mais cela fonctionne pour moi:

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

Il est facile de voir pourquoi les travaux ci-dessus. Vous voulez vous assurer que votre nombre est divisé par 5 est un entier, arrondie. Donc, nous allons d'abord faire exactement cela (round(float(x)/5)), et alors, puisque nous avons divisé par 5, on multiplie par 5. La finale de la conversion en int est parce qu' round() renvoie une valeur à virgule flottante en Python.

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

81voto

CCKx Points 165

Pour arrondir à des valeurs non entières, telles que 0,05:

 def myround(x, prec=2, base=.05):
  return round(base * round(float(x)/base),prec)
 

J'ai trouvé cela utile car je pouvais juste faire une recherche et remplacer dans mon code pour changer "round (") "en" myround ("), sans avoir à changer les valeurs des paramètres.

26voto

amo-ej1 Points 1142

C'est juste une question de mise à l'é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
 

19voto

hgdeoro Points 235

Supprimer le "reste" fonctionnerait:

 rounded = int(val) - int(val) % 5
 

Si la valeur est déjà un entier:

 rounded = val - val % 5
 

En tant que fonction:

 def roundint(value, base=5):
    return int(value) - int(value) % int(base)
 

10voto

pwdyson Points 568

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

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

Comme 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 ça compte beaucoup, à moins que tu aimes changer un peu

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X