pythonで計算結果の桁数が大きい時、有効数字を設定して見やすくしたい場合がありますよね。
本記事ではpythonで有効数字を丸める方法を3つ紹介します。
この記事を読むことで、有効数字の丸め方が分かります。
pythonで有効数字を丸める3つの方法
pythonで有効数字を丸める方法は3つあります。
- round()
- decimal
- decimal.quantize()
実際にコードを書きながらそれぞれの方法の使い方を覚えましょう。
手軽に有効数字を丸める|round()
round()関数はpythonに元々備わっている関数(組み込み関数)です。
使用方法はround(number[, ndigits])で、ndigitsは丸め込む有効数字の桁数を指定します。
桁数を指定しない場合は、入力した値に最も近い整数を返します。
round(98765, -1)
出力:
98765.3
四捨五入ですと5は切り上げになりますが、round()関数では切り捨てになる場合があるので注意が必要です。
round(98765, -1)
出力:
98760
98765は四捨五入すると98770になるはずですが、出力結果は98760になりました。
きちんと四捨五入の操作をしたい場合は、次に紹介するdecimal.quantize()を使いましょう。
四捨五入で有効数字を丸める(計算)|decimal
decimalライブラリは十進法を正確に表現するためのライブラリです。
decimalは標準ライブラリのため、インストールの必要がありません。
from decimal import *でdecimalのライブラリのモジュールをまとめてインポートします。
from decimal import *
getcontext()で現在の設定を確認できます。
getcontext()
出力:
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
始めに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’)
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は計算結果にしか使用できませんでした。ただの数字の有効数字を四捨五入で丸めるには別の方法が必要です。
decimalライブラリにある、decimal.quantize()関数でこの問題を解決できます。
decimalの時同様、decimalライブラリのモジュールをまとめてインポートします。
from decimal import *
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’)
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習得するための勉強方法やおすすめの教材を紹介しています。
コメント