web-dev-qa-db-fra.com

Prendre le plancher d'un flotteur

J'ai trouvé deux façons de prendre des sols en Python:

3.1415 // 1

et

import math
math.floor(3.1415)

Le problème avec la première approche est qu'elle renvoie un flottant (à savoir 3.0). La deuxième approche semble maladroite et trop longue.

Existe-t-il des solutions alternatives pour prendre des sols en Python?

38
Randomblue

Tant que vos nombres sont positifs, vous pouvez simplement convertir en int pour arrondir à l'entier suivant:

>>> int(3.1415)
3

Pour les nombres entiers négatifs, cela arrondira cependant.

60
Sven Marnach

Vous pouvez appeler int () sur le flotteur pour lancer vers l'int inférieur (pas évidemment le sol mais plus élégant)

int(3.745)  #3

Sinon, appelez int sur le résultat du plancher.

from math import floor

f1 = 3.1415
f2 = 3.7415

print floor(f1)       # 3.0
print int(floor(f1))  # 3
print int(f1)         # 3
print int(f2)         # 3 (some people may expect 4 here)
print int(floor(f2))  # 3

http://docs.python.org/library/functions.html#int

13
Matt Alcock

La deuxième approche est la voie à suivre, mais il existe un moyen de la raccourcir.

from math import floor
floor(3.1415)
6
Mark Ransom

Castez-le dans int si vous ne voulez pas de float

int(3.1415 // 1)
4
mVChr

Attention, prendre la parole et faire un casting sur un int n'est pas la même chose avec des nombres négatifs. Si vous voulez vraiment que le sol soit un entier, vous devez convertir en entier après avoir appelé math.floor ().

>>> int(-0.5)
0
>>> math.floor(-0.5)
-1.0
>>> int(math.floor(-0.5))
-1
3
camomilk
from math import floor


def ff(num, step=0):
    if not step:
        return floor(num)
    if step < 0:
        mplr = 10 ** (step * -1)
        return floor(num / mplr) * mplr
    ncnt = step
    if 1 > step > 0:
        ndec, ncnt = .0101, 1
        while ndec > step:
            ndec *= .1
            ncnt += 1
    mplr = 10 ** ncnt
    return round(floor(num * mplr) / mplr, ncnt)

Vous pouvez utiliser des nombres positifs/négatifs et des points flottants .1, .01, .001 ...

0
Vadim