何の記事?
Python3で小数点以下を丸める関数にroundがありますが、
浮動小数点演算の問題により四捨五入が正確に行われない
場合があります。
f = 2.675
print(round(f, 2))
実行結果:
2.67
本当は2.68にならなければなりませんが切り捨てされてしまっています。この事象に対する対策です。
Decimalを用いる方法
Decimalを用います。
from decimal import Decimal, ROUND_HALF_UP
def my_round(x, d=2):
p = Decimal(str(x)).quantize(Decimal(str(1/10**d)), rounding=ROUND_HALF_UP)
p = float(p)
return p
print(my_round(2.675, d=2))
実行結果:
2.68