10進モジュール:10進は10進を意味し、このモジュールは10進浮動小数点演算のサポートを提供します
10進整数または文字列パラメーターに渡すことはできますが、浮動小数点データ自体が正確でないため、浮動小数点データにすることはできません。
浮動小数点データから10進型に変換するには
from decimal import *
Decimal.from_float(12.222)
from decimal import *
getcontext().prec = 6
Decimal(1)/Decimal(7)
from decimal import *
Decimal(‘50.5679’).quantize(Decimal(‘0.00’))
from decimal import *
str(Decimal(‘3.40’).quantize(Decimal(‘0.0’)))
Python3での10進処理計算精度問題の例
#! /usr/bin/python3
# coding:utf-8import decimal
from decimal import Decimal, getcontext
def demo():"""
丸めの問題:
ROUND_CEILINGは常に無限大になり、切り上げます
ROUND_DOWNは常に0に向かって丸められます
ROUND_FLOORは常に負の無限大になる傾向があり、切り捨てられます
ROUND_HALF_DOWN最後の有効な桁が5以上の場合は、0に向かって丸めます。それ以外の場合は、0に向かって丸めます。
ROUND_HALF_EVENはROUNDに似ています_HALF_ただし、DOWNの場合、最後の有効な桁の値が5の場合、前の桁がチェックされます。
偶数の値では結果が切り捨てられ、奇数の値では結果が切り上げられます
ROUND_HALF_UPはROUNDに似ています_HALF_DOWN、ただし最後の有効な桁が5の場合、値は0の反対方向に丸められます
ROUND_UPは0の反対方向に丸められます
ROUND_05UP最後の桁が0または5の場合は、0の反対方向に丸めます。それ以外の場合は、0に丸めます。
"""
# 1. 日常の計算
getcontext().prec =9
r1 =Decimal(1)/Decimal(3)print("r1 ", r1) # r1 0.333333333
# 2. しかし、getcontext().precには小数点前のすべての長さが含まれ、前の長さが変更された場合、小数点以下の桁数は固定できません。
r2 =Decimal(10)/Decimal(3)print("r2 ", r2) # r2 3.33333333
# 3. 小数点以下の桁数を制御したい場合は、decimalを使用する必要があります.quantize(Decimal('0.00000000'))、getcontextを超えることはできないことに注意してください().precの数
r3 =Decimal(1)/Decimal(3)print("r3 ", r3.quantize(Decimal('0.00000000'))) # r3 0.33333333
r4 =Decimal(10)/Decimal(3)print("r4 ", r4.quantize(Decimal('0.00000000'))) # r4 3.33333333
r5 =Decimal(10)/Decimal(str(1.5))print("r5 ", r5.quantize(Decimal('0.00000000'))) # r5 6.66666667
# 4. 切り上げ
getcontext().rounding =getattr(decimal,'ROUND_CEILING') #常に無限大に向かって切り上げます
r6 =Decimal(10)/Decimal(str(1.5)) # r6 6.66666667print("r6 ", r6.quantize(Decimal('0.00000000')))
r7 =Decimal(10)/Decimal(3) # r7 3.33333334print("r7 ", r7.quantize(Decimal('0.00000000')))
# 5. 切り捨て
getcontext().rounding =getattr(decimal,'ROUND_FLOOR') #常に無限大に向かって切り捨てます
r8 =Decimal(10)/Decimal(str(1.5)) # r8 6.66666666print("r8 ", r8.quantize(Decimal('0.00000000')))
r9 =Decimal(10)/Decimal(3) # r9 3.33333333print("r9 ", r9.quantize(Decimal('0.00000000')))if __name__ =='__main__':demo()
以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。
Recommended Posts