タイトルが示唆するように、私は浮動小数点数を取り、最も近い整数にそれを切り捨てたいと思います。しかし、整数ではない場合は、次の整数にどれだけ近いかに関係なく、常に変数を切り捨てます。これを行う方法はありますか?
単純な
print int(x)
同様に動作します。
これらのうちの1つはうまくいくはずです。
import math
math.trunc(1.5)
> 1
math.trunc(-1.5)
> -1
math.floor(1.5)
> 1
math.floor(-1.5)
> -2
x//1
//演算子は除算のフロアを返します。 1で割っても数値は変わらないので、これはfloorと同等ですが、インポートは不要です。ノート:
1)これはfloatを返します
2)これは-∞に丸めます
浮動小数点の結果を得るには単純に次のようにします。
round(x-0.5)
負の数でも同様に機能します。
フロア機能が必要だと思います。
多くの人が使うと言っています:
int(x)
これはほとんどの場合問題なく動作しますが、少し問題があります。 OPの結果が
x = 1.9999999999999999
四捨五入します
x = 2
16日9日以降は丸みを帯びます。あなたがそのようなことに出会うことは決してないと確信しているなら、これは大したことではありません。しかし、それは心に留めておくべきことです。
数学をインポートしたくない場合は、次のようにします。
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.
あなたが不機嫌そうに働いているなら、あなたは負の数でもうまくいく以下の解決策を使うことができます(それはまた配列で働いています)
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
モジュールを使うだけでもうまくいくと思います。
あなたがこれを解決したかどうかわからないが、私はこの質問につまずく。あなたが小数点を取り除きたいならば、あなたはint(x)を使用することができます、そしてそれはすべての小数点を除去するでしょう。それらはround(x)を使用する必要はありません。
丸める(x-0.5)だけで、これは常にあなたのFloatの次に切り捨てられたInteger値を返します。 do round(x + 0.5)でも簡単に切り上げることができます
それは非常に簡単かもしれませんが、あなたはそれを切り上げてマイナス1にすることはできませんか?例えば:
number=1.5
round(number)-1
> 1