回答編集履歴

1 誤記修正

YakumoSaki

YakumoSaki score 1756

2020/08/19 16:44  投稿

floatは小数点をうまく表せずに近似値になる場合があります。計算を行わなければ
それが表に出てくることはあまり無いのですが、計算時には誤差が発生します。
質問者さんが遭遇したのがまさにそれです。
そんなときのために、decimalが用意されているのでそちらを使用すると誤差が発生しません。
[decimalについての公式ドキュメント](https://docs.python.org/ja/3/library/decimal.html)
```Python
from decimal import *
num = "-2.3"
num1 = Decimal(num)
x = num1 + Decimal("1.1") # 1.0を文字列表現にしていることに注意。
x = num1 + Decimal("1.1") # 1.1を文字列表現にしていることに注意
print(x) # -1.2
# ダメな例1
num2 = Decimal(num)
y = num2 + Decimal(1.1) # 1.1 がfloatになってしまっているので誤差が発生
print(y) # -1.199999999999999911182158030
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る