web-dev-qa-db-ja.com

浮動小数点数を最も近い整数に切り捨てますか。

タイトルが示唆するように、私は浮動小数点数を取り、最も近い整数にそれを切り捨てたいと思います。しかし、整数ではない場合は、次の整数にどれだけ近いかに関係なく、常に変数を切り捨てます。これを行う方法はありますか?

82
Anthony Perez

単純な

print int(x)

同様に動作します。

128
Makaveli

これらのうちの1つはうまくいくはずです。

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

//演算子は除算のフロアを返します。 1で割っても数値は変わらないので、これはfloorと同等ですが、インポートは不要です。ノート:
1)これはfloatを返します
2)これは-∞に丸めます

26
Huy D

浮動小数点の結果を得るには単純に次のようにします。

round(x-0.5)

負の数でも同様に機能します。

25
DmitryG

フロア機能が必要だと思います。

math.floor(x)

24
voidMainReturn

多くの人が使うと言っています:

        int(x)

これはほとんどの場合問題なく動作しますが、少し問題があります。 OPの結果が

     x = 1.9999999999999999

四捨五入します

     x = 2

16日9日以降は丸みを帯びます。あなたがそのようなことに出会うことは決してないと確信しているなら、これは大したことではありません。しかし、それは心に留めておくべきことです。

6
lokilindo

数学をインポートしたくない場合は、次のようにします。

int(round(x))

ここにドキュメントがあります:

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

あなたが不機嫌そうに働いているなら、あなたは負の数でもうまくいく以下の解決策を使うことができます(それはまた配列で働いています)

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

mathモジュールの代わりにnumpyモジュールを使うだけでもうまくいくと思います。

2
Mr Poin

あなたがこれを解決したかどうかわからないが、私はこの質問につまずく。あなたが小数点を取り除きたいならば、あなたはint(x)を使用することができます、そしてそれはすべての小数点を除去するでしょう。それらはround(x)を使用する必要はありません。

1
Gaahbon

丸める(x-0.5)だけで、これは常にあなたのFloatの次に切り捨てられたInteger値を返します。 do round(x + 0.5)でも簡単に切り上げることができます

0
Dominic Nagel

それは非常に簡単かもしれませんが、あなたはそれを切り上げてマイナス1にすることはできませんか?例えば:

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