Pythonのデシマル – 除算、四捨五入、精度
Pythonのdecimalモジュールは、数字の正確な精度と丸め方を考慮した除算をサポートしています。
Pythonのdecimalモジュール
小数点を使った数字との作業
十進数は、小数点以下の桁数が固定された浮動小数点数です。必要に応じて適切に数値を四捨五入しなければならず、さもなくば結果は予期せぬものになるかもしれません。Pythonのdecimalモジュールは、十進数をより正確に取り扱うのに役立ちます。
小数モジュールの必要性 (Shōsū mojūru no hitsuyōsei)
このモジュールを実際に利用する前に、どの程度の精度が必要であるかを確認し、なぜこのモジュールが必要なのかを確立しましょう。以下のコードスニペットを見てみましょう。
division = 72 / 7
print(division)
デシマルモジュールを使用する。
この投稿で私たちが作成するすべてのプログラムにおいて、私たちはすべてのプログラムでdecimalモジュールをインポートすることになります。
import decimal
こちらのモジュールから特定の機能のみをインポートする場合もあります。次のように行うことができます。
from decimal import Decimal
いくつかのプログラムに10進モジュールを導入しましょう。
Pythonのdecimalモジュールの例です。
今から、モジュールに関連する例から始めます。 (Ima kara, mojūru ni kanren suru rei kara hajimemasu.)
小数点付きの割り算を修正する。
ここでは、浮動小数点の結果を出力するべき除算を実行するために、上記で書いたプログラムを修正します。小数モジュールを使用した修正済みのプログラムは以下のようになります。
import decimal
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
単一操作の精密制御
前のプログラムでは、答えには25桁の小数点がありましたが、もし小数の値を3桁までしか表示したくない場合はどうでしょうか?これも制御することができます。ここでは、答えの精度を制御し、他の操作には反映されません。
import decimal
with decimal.localcontext() as ctx:
ctx.prec = 3
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)
完全なプログラムにおける制御の精度
プログラム全体で精度を制御することも可能です。ただし、プログラム内でたくさんの数値を扱う場合には常に推奨されません。以下に例を示します:
import decimal
decimal.getcontext().prec = 3
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)
数字を四捨五入する
ラウンド(…)関数を使用して、数字を優美に丸めることができます。やってみましょう。
import decimal
#Can be rounded to 13.48 or 13.49
rounded = round(13.485, 2)
print(rounded)
import decimal
#Can be rounded to 13.48 or 13.49
rounded = round(13.485, 2)
print(decimal.Decimal(rounded).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP))
PythonのDecimalコンテキストを取得する
もしデフォルトのコンテキストをデフォルトで設定されたdecimalモジュールを見たい場合、以下のスクリプトを使用できます。
from decimal import *
print(getcontext())