[解決済み] Python は整数を次の100に切り上げます。
質問
すでに何百回も質問されているようですが、浮動小数点数の丸めに関する関数しか見当たりません。どのように私は、例えば、整数を丸めるのですか?
130 -> 200
?
どのように解決するのですか?
丸めは一般的に浮動小数点数に対して行われますが、ここでは知っておくべき3つの基本的な関数を紹介します。
round
(最も近い整数に丸める)。
math.floor
(常に切り捨て)、そして
math.ceil
(常に切り上げ)です。
整数と百の切り上げについて尋ねていますが、私たちはまだ
math.ceil
を使うことができます。
53
. 使用方法
math.ceil
を使うには、まず100で割って切り上げ、その後に100をかければいいのです。
>>> import math
>>> def roundup(x):
... return int(math.ceil(x / 100.0)) * 100
...
>>> roundup(100)
100
>>> roundup(101)
200
先に100で割ってから100を掛けると、小数点以下2桁が左右にずれるので、次のようになります。
math.ceil
は百の位で動作します。次のようにします。
10**n
は 100 の代わりに 10 に丸めたい場合 (
n = 1
)、千単位(
n = 3
) など。
これを行う別の方法は、浮動小数点数を避け(精度に制限がある)、代わりに整数だけを使うことです。Pythonでは整数は任意の精度を持つので、これによってどんな大きさの数でも丸めることができます。丸めのルールは簡単で、100で割った余りを求め、それが0でなければ100からその余りを引いたものを足すというものです。
>>> def roundup(x):
... return x if x % 100 == 0 else x + 100 - x % 100
これはどのような大きさの数字に対しても有効です。
>>> roundup(100)
100
>>> roundup(130)
200
>>> roundup(1234567891234567891)
1234567891234567900L
2つのソリューションのミニベンチマークをやってみました。
$ python -m timeit -s 'import math' -s 'x = 130' 'int(math.ceil(x/100.0)) * 100'
1000000 loops, best of 3: 0.364 usec per loop
$ python -m timeit -s 'x = 130' 'x if x % 100 == 0 else x + 100 - x % 100'
10000000 loops, best of 3: 0.162 usec per loop
に比べて、純粋な整数解は2倍速くなります。
math.ceil
ソリューションと比較して2倍高速です。
Thomas は、ブール値の乗算によるトリックを使用することを除いて、私が上に持っているものと同一の整数ベースの解決策を提案しました。この方法でコードを書くことによる速度の利点がないことは興味深いことです。
$ python -m timeit -s 'x = 130' 'x + 100*(x%100>0) - x%100'
10000000 loops, best of 3: 0.167 usec per loop
最後に、101-149 を 100 に、150-199 を 200 に丸めたい場合、例えば、丸め先の
最も近い
100 に丸めたい場合、組み込みの
round
関数がそれを行うことができます。
>>> int(round(130, -2))
100
>>> int(round(170, -2))
200
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] Pythonの@propertyデコレーターはどのように機能するのでしょうか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] PythonでSVGからPNGに変換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?