python3で数値を0.05刻みで切り捨てて丸めるにはどうすればよいでしょうか?
例えば
151.266なら151.25
151.246なら151.20
としたいです
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
まず 2 倍してから 0.1 単位で 切り捨てや四捨五入して、 それを 1/2 倍すればよいと思います。
2 倍する計算は, あまり誤差は発生しません。(多分)
quantize メソッドの rounding で 切り捨て、切り上げ、四捨五入などを制御できます。
eee.py
python3
1from decimal import * 2 3def round_floor(v): 4 return Decimal(str(v * 2)).quantize(Decimal("0.1"), rounding=ROUND_FLOOR) / Decimal("2") 5 6def round_45(v): 7 return Decimal(str(v * 2)).quantize(Decimal("0.1"), rounding=ROUND_HALF_UP) / Decimal("2") 8 9data = [151.200, 151.246, 141.249, 10 151.250, 151.266, 151.299, 11 151.300, 151.349] 12 13for v in data: 14 print('{:.3f} -> {}\t{}'.format(v, round_floor(v), round_45(v)))
参考情報
-
Pythonで小数・整数を四捨五入するroundとDecimal.quantize
https://note.nkmk.me/python-round-decimal-quantize/ -
Decimal.quantize()メソッドによる端数処理
https://python.atelierkobato.com/quantize/
投稿2019/02/27 16:24
総合スコア22328
0
投稿2019/02/27 08:17
総合スコア6851
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
python
1def around(x, base): 2 return base * int(x / base) 3 4print(around(151.266, base=0.05)) # 151.25 5print(around(151.246, base=0.05)) # 151.20000000000002
投稿2019/02/27 08:16
編集2019/02/27 08:37総合スコア21960
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。