144 votes

Arrondir un nombre à virgule flottante à l'entier le plus proche ?

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 ?

10voto

lokilindo Points 410

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.

6voto

Tyler Points 105

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.

3voto

Mr Poin Points 61

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.

3voto

Dominic Nagel Points 75

Il suffit de faire round(x-0.5), ce qui renverra toujours la valeur entière arrondie à la baisse de votre variable. Vous pouvez aussi facilement arrondir à la valeur supérieure en faisant round(x+0.5)

1voto

Gaahbon Points 191

Je ne sais pas si vous avez résolu ce problème, mais je viens de tomber sur cette question. Si vous voulez vous débarrasser des points décimaux, vous pouvez utiliser int(x) et il éliminera tous les chiffres décimaux. Il n'est pas nécessaire d'utiliser round(x).

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