Comme le titre l'indique, je veux prendre un nombre à virgule flottante et l'arrondir à l'entier le plus proche. Cependant, si ce n'est pas un tout, je veux TOUJOURS arrondir la variable, quelle que soit sa proximité avec le prochain entier supérieur. Y a-t-il un moyen de faire cela?
python
floating-point
integer
rounding
Anthony Perez
la source
la source
Réponses:
Facile
fonctionnera également.
la source
int(-23.3) == 23
L'un de ceux-ci devrait fonctionner:
la source
math.trunc
est un entier, tandis que la sortie demath.floor
est un flottant.type(math.floor(1.51)) -> int
et àtype(math.trunc(1.51)) -> int
partir depython 3.6.0
L'
//
opérateur retourne l'étage de la division. Puisque la division par 1 ne change pas votre nombre, cela équivaut au plancher mais aucune importation n'est nécessaire. Remarques:la source
int(-1.1) == -1
tandis que-1.1//1 == -2.0
cependantdecimal.Decimal('-1.1')//1 == decimal.Decimal('-1')
(comme documenté, la revendication 2 n'est pas vraie pourdecimal
), donc se fier à son//
comportement n'est pas totalement stable, même aujourd'hui.Pour obtenir un résultat en virgule flottante, utilisez simplement:
Cela fonctionne également pour les nombres négatifs.
la source
Je pense que vous avez besoin d'une fonction au sol:
math.floor (x)
la source
beaucoup de gens disent d'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:il s'arrondira à
après le 16e 9, il s'arrondira. Ce n'est pas un gros problème si vous êtes sûr de ne jamais rencontrer une telle chose. Mais c'est quelque chose à garder à l'esprit.
la source
1.9999999999999999
est en fait égal à2.0
dans la représentation float64 interne. C'est à dire. il est déjà arrondi dès qu'il est analysé en un flottant, car un flottant de 64 bits ne peut pas représenter autant de chiffres significatifs. Vous pouvez le vérifier en évaluant1.9999999999999999 == 2.0
. Et si vous pensez que l'opération d'égalité effectue un arrondi sur les flottants, vous pouvez comparer la représentation binaire avecstruct.pack("d", 1.9999999999999999) == struct.pack("d", 2.0)
, qui est également égale.int()
. La valeur est déjà de 2,0 et il la convertira heureusement en 2.int()
, cela a uniquement à voir avec une mauvaise utilisation defloat
, comme1.9999999999999999
arrondi à2.0
au moment de la compilation (alors qu'ilint()
est appelé au moment de l'exécution). Si vous utilisez le bon type de données pour la variable, tout fonctionne comme prévu:int(decimal.Decimal('1.9999999999999999999999999999999999999999999999999999999'))
donne1
Si vous ne souhaitez pas importer de mathématiques, vous pouvez utiliser:
int(round(x))
Voici un morceau de documentation:
la source
round
a déjà été discutée et rejetée comme réponse lorsque cette question a été posée il y a un an. OP veutmath.floor
.Si vous travaillez avec numpy, vous pouvez utiliser la solution suivante qui fonctionne également avec des nombres négatifs (elle fonctionne également sur des tableaux)
Je pense que cela fonctionnera également si vous utilisez simplement le
math
module au lieu dunumpy
module.la source
Je ne sais pas si vous avez résolu cela, mais je tombe juste 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'est pas nécessaire d'utiliser round (x).
la source
Faites simplement arrondi (x-0,5), cela retournera toujours la prochaine valeur entière arrondie vers le bas de votre Float. Vous pouvez également arrondir facilement par faire un tour (x + 0,5)
la source
Cela peut être très simple, mais ne pourriez-vous pas simplement arrondir le chiffre à moins 1? Par exemple:
la source
integer
.J'ai utilisé ce code où vous soustrayez 0,5 du nombre et lorsque vous l'arrondissez, c'est le nombre d'origine arrondi vers le bas.
la source