web-dev-qa-db-ja.com

フロートの床を取る

Pythonでフロアを取得する2つの方法を見つけました。

3.1415 // 1

そして

import math
math.floor(3.1415)

最初のアプローチの問題は、float(つまり3.0)。 2番目のアプローチは不器用で長すぎます。

Pythonでフロアを取得するための代替ソリューションはありますか?

38
Randomblue

数値が正である限り、単にintに変換して次の整数に切り捨てることができます。

>>> int(3.1415)
3

ただし、負の整数の場合、これは切り上げられます。

60
Sven Marnach

フロートでint()を呼び出して、より低いint(明らかに床ではなく、よりエレガントな)にキャストできます。

int(3.745)  #3

または、フロア結果でintを呼び出します。

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

2番目のアプローチは進むべき方法ですが、短縮する方法があります。

from math import floor
floor(3.1415)
6
Mark Ransom

intが必要ない場合は、floatにキャストします

int(3.1415 // 1)
4
mVChr

床を取り、intにキャストすることは負の数と同じではないことに注意してください。フロアを整数として本当に必要とする場合は、math.floor()を呼び出した後にintにキャストする必要があります。

>>> 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)

正/負の数と浮動小数点.1、.01、.001 ...を使用できます。

0
Vadim