こんな風に、floatだと微妙に値がずれる事があります。
print(0.3)
# => 0.3
print(0.1 * 3)
# => 0.30000000000000004
そこで、表現誤差を取り除くメソッドを作ってみました。
(小数点以下15桁になるように四捨五入しています。)
from decimal import Decimal, ROUND_HALF_UP
def remove_representation_error_in_float(x):
x = Decimal(str(x)).quantize(Decimal('0.000000000000001'), rounding=ROUND_HALF_UP)
x = float(str(x))
return x