web-dev-qa-db-fra.com

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

Comme le titre le suggère, je veux prendre un nombre à virgule flottante et l’arrondir au nombre entier le plus proche. Cependant, si ce n'est pas un tout, je veux TOUJOURS arrondir la variable, quelle que soit sa proximité avec l'entier supérieur supérieur. Y a-t-il un moyen de faire cela?

91
Anthony Perez

Facile

print int(x)

fonctionnera aussi bien.

137
Makaveli

L'un d'entre eux devrait fonctionner:

import math
math.trunc(1.5)
> 1
math.trunc(-1.5)
> -1
math.floor(1.5)
> 1
math.floor(-1.5)
> -2
68
U2EF1
x//1

L'opérateur // retourne l'étage de la division. Étant donné que diviser par 1 ne change pas votre nombre, cela équivaut à plancher, mais aucune importation n'est nécessaire. Remarques:
1) Ceci retourne un float
2) Ceci tourne vers -∞

28
Huy D

Pour obtenir un résultat en virgule flottante, utilisez simplement:

round(x-0.5)

Cela fonctionne aussi pour les nombres négatifs.

26
DmitryG

Je pense que vous avez besoin d'une fonction de sol:

math.floor (x)

26
voidMainReturn

beaucoup de gens disent 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 OP est:

     x = 1.9999999999999999

il va arrondir à

     x = 2

après le 16, il sera arrondi. Ce n'est pas grave si vous êtes sûr de ne jamais tomber sur une telle chose. Mais c'est quelque chose à garder à l'esprit.

6
lokilindo

Si vous ne voulez pas importer de maths, vous pouvez utiliser:

int(round(x))

Voici un morceau 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.
6
Tyler

Si vous travaillez avec numpy, vous pouvez utiliser la solution suivante, qui fonctionne également avec les nombres négatifs (elle fonctionne également 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 le module math à la place du module numpy.

2
Mr Poin

Je ne sais pas si vous avez résolu ça, mais je tombe sur cette question. Si vous voulez vous débarrasser des points décimaux, vous pouvez utiliser int (x) et cela éliminera tous les chiffres décimaux. Il n'y a pas besoin d'utiliser round (x).

1
Gaahbon

Faites juste round (x-0.5). Cela retournera toujours la valeur Integer arrondie suivante de votre float. Vous pouvez aussi facilement arrondir par tour (x + 0.5)

0
Dominic Nagel

C'est peut-être très simple, mais ne pourriez-vous pas l'arrondir moins 1? Par exemple:

number=1.5
round(number)-1
> 1
0
user3645688