pythonで有効数字を丸める3つの方法|round(), decimal, decimal.quantize()

pythonで有効数字を丸める3つの方法

pythonで計算結果の桁数が大きい時、有効数字を設定して見やすくしたい場合がありますよね。

本記事ではpythonで有効数字を丸める方法を3つ紹介します。

この記事を読むことで、有効数字の丸め方が分かります。

目次

pythonで有効数字を丸める3つの方法

pythonで有効数字を丸める3つの方法

pythonで有効数字を丸める方法は3つあります。

  • round()
  • decimal
  • decimal.quantize()

実際にコードを書きながらそれぞれの方法の使い方を覚えましょう。

手軽に有効数字を丸める|round()

手軽に有効数字を丸める|round()

round()関数はpythonに元々備わっている関数(組み込み関数)です。

pyhon公式ドキュメントーround

使用方法はround(number[, ndigits])で、ndigitsは丸め込む有効数字の桁数を指定します。

桁数を指定しない場合は、入力した値に最も近い整数を返します。

round(98765, -1)

出力:

98765.3

四捨五入ですと5は切り上げになりますが、round()関数では切り捨てになる場合があるので注意が必要です。

round(98765, -1)

出力:

98760

98765は四捨五入すると98770になるはずですが、出力結果は98760になりました。

きちんと四捨五入の操作をしたい場合は、次に紹介するdecimal.quantize()を使いましょう。

四捨五入で有効数字を丸める(計算)|decimal

四捨五入で有効数字を丸める(計算)|decimal

decimalライブラリは十進法を正確に表現するためのライブラリです。

python公式ドキュメントーdecimal

decimalは標準ライブラリのため、インストールの必要がありません。

STEP
ライブラリのインポート

from decimal import *でdecimalのライブラリのモジュールをまとめてインポートします。

from decimal import *
STEP
設定の確認

getcontext()で現在の設定を確認できます。

getcontext()

出力:

Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])

STEP
設定を変更して有効数字を丸める

始めにgetcontext()で丸め込みの設定を行います。

precで有効桁数を設定できます。この設定は計算結果のみに反映され、ただの数字には反映されません。

また、丸め込み方法はroundingで設定可能です。

  • ROUND_HALF_EVEN: round()関数と同じ丸め込み方法
  • ROUND_HALF_UP: 四捨五入で丸め込む

グーグルコラボラトリーやjupyter notebookのような対話式のコーディング環境の場合、設定と計算を1つのセルで完結させましょう。

Decimal(‘数字’)と記述することで、decimalを使用できます。文字列でも計算可能です。

getcontext().rounding=ROUND_HALF_UP
getcontext().prec=2
Decimal('3.25') + Decimal('6.0')

出力:

Decimal(‘9.3’)

STEP
データタイプの変更

decimalを使用した場合、出力結果のデータタイプはdecimal.Decimalです。

計算後に他の操作をしたい場合はfloat()関数でデータタイプを変更しましょう。

getcontext().rounding=ROUND_HALF_UP
getcontext().prec=2
D = Decimal('3.25') + Decimal('6.0')

print(D)
print(type(D))

fD = float(D)
print(fD)
print(type(fD))

出力:

9.3
<class ‘decimal.Decimal’>
9.3
<class ‘float’>

四捨五入を有効数字で丸める(数字)|decimal.quantize()

四捨五入を有効数字で丸める(数字)|decimal.quantize()

decimalは計算結果にしか使用できませんでした。ただの数字の有効数字を四捨五入で丸めるには別の方法が必要です。

decimalライブラリにある、decimal.quantize()関数でこの問題を解決できます。

STEP
ライブラリのインポート

decimalの時同様、decimalライブラリのモジュールをまとめてインポートします。

from decimal import *
STEP
decimal.quantiz()を使用する

Decimal(str(丸めたい数字)).quantize(Decimal(‘有効数字’), rounding=丸め込み方法)で有効数字の丸め込みが可能です。

roundingはデフォルトでROUND_HALF_EVENなので、rounding=ROUND_HALF_UPと設定することで、四捨五入が可能です。

Decimal(str(3.25)).quantize(Decimal('0.1'), rounding=ROUND_HALF_UP)

出力:

Decimal(‘3.3’)

STEP
データタイプの変更

decimalライブラリを使用しているため、データタイプはdecimal.Decimalです。

必要に応じてデータタイプを変更してください。

D = Decimal(str(3.25)).quantize(Decimal('0.1'), rounding=ROUND_HALF_UP)
print(D)
print(type(D))
fD = float(D)
print(fD)
print(type(fD))

出力:

3.3
<class ‘decimal.Decimal’>
3.3
<class ‘float’>

まとめ

pythonで有効数字を丸める方法を3つ紹介しました。

面倒な設定の必要がないround()関数がオススメですが、四捨五入の仕組みが異なる点に注意です。

この記事を読んでpythonを勉強したいと思った人には次の記事がオススメです。

独学でpython習得するための勉強方法やおすすめの教材を紹介しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次