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?
Facile
print int(x)
fonctionnera aussi bien.
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
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 -∞
Pour obtenir un résultat en virgule flottante, utilisez simplement:
round(x-0.5)
Cela fonctionne aussi pour les nombres négatifs.
Je pense que vous avez besoin d'une fonction de sol:
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.
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.
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
.
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).
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)
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