Je veux prendre un nombre à virgule flottante et l'arrondir à l'entier le plus proche. Cependant, s'il ne s'agit pas d'un entier, je siempre veulent arrondir la variable à l'inférieur, quelle que soit sa proximité avec le prochain entier supérieur. Existe-t-il un moyen de faire cela ?
Réponses
Trop de publicités?Beaucoup de gens disent qu'il faut utiliser int(x)
et cela fonctionne bien dans la plupart des cas, mais il y a un petit problème. Si le résultat de l'OP est :
x = 1.9999999999999999
il sera arrondi à
x = 2
après le 16ème 9, il s'arrondit. Ce n'est pas un problème si vous êtes sûr de ne jamais rencontrer une telle chose. Mais c'est quelque chose à garder à l'esprit.
Si vous ne voulez pas importer les mathématiques, vous pouvez utiliser :
int(round(x))
Voici un élément de documentation :
>>> help(round)
Help on built-in function round in module __builtin__:
round(...)
round(number[, ndigits]) -> floating point number
Round a number to a given precision in decimal digits (default 0 digits).
This always returns a floating point number. Precision may be negative.
Si vous travaillez avec numpy, vous pouvez utiliser la solution suivante qui fonctionne aussi avec les nombres négatifs (elle fonctionne aussi sur les tableaux)
import numpy as np
def round_down(num):
if num < 0:
return -np.ceil(abs(num))
else:
return np.int32(num)
round_down = np.vectorize(round_down)
round_down([-1.1, -1.5, -1.6, 0, 1.1, 1.5, 1.6])
> array([-2., -2., -2., 0., 1., 1., 1.])
Je pense que cela fonctionnera également si vous utilisez simplement la fonction math
au lieu du module numpy
module.