decimalモジュールを使った小数点の計算

Pythonでは小数点の計算が思っていたのとは異なることを書きました。
Pythonでの小数点の表示がおかしい
これに対して、decimalモジュールのDecimal関数を使うと上手くいきます。

import decimal
print(decimal.Decimal(0.1))
print(decimal.Decimal(0.1) + decimal.Decimal(0.1))
print(decimal.Decimal(0.1) + decimal.Decimal(0.1) + decimal.Decimal(0.1))
0.1000000000000000055511151231257827021181583404541015625
0.2000000000000000111022302463
0.3000000000000000166533453694

このように、2進数に置き換えていることによる誤差が発生します。これに対して不思議ですが、数字に'( )’quotationを付けるとイメージ通りの計算をしてくれます。

print(decimal.Decimal('0.1'))
print(decimal.Decimal('0.1') + decimal.Decimal('0.1'))
print(decimal.Decimal('0.1') + decimal.Decimal('0.1') + decimal.Decimal('0.1'))
0.1
0.2
0.3

それでは、簡単な計算をしてみます。

print(0.3 - 0.2)
print(decimal.Decimal(0.3) - decimal.Decimal(0.2))
print(decimal.Decimal('0.3') - decimal.Decimal('0.2'))
0.09999999999999998
0.09999999999999997779553950750
0.1

使い途によっても異なると思いますが、ほとんどのケースではdecimalモジュールのDecimal関数を使うのが最も好ましいように思われます。

この記事を書いた人

目次
閉じる