前言
decimal 模块实现了定点和浮点算术运算符,使用的是大多数人所熟悉的模型,而不是程序员熟悉的模型,即大多数计算机硬件实现的 IEEE 浮点数运算。Decimal 实例可以准确地表示任何数,对其上取整或下取整,还可以对有效数字个数加以限制。
问题
硬件浮点数无法准确地表述值。例如 0.01 + 0.09
–> 0.09999999999999999
解决方案
使用decimal内置模块
导入
decimal模块是python自带模块,不需要安装,直接倒入即可
import decimal
基本使用
from decimal import Decimal
d = Decimal(value='0.01') + Decimal(value='0.09')
>>> Decimal('0.10')
d + 10
>>> Decimal('10.10')
设置全局精度
import decimal
decimal.getcontext().prec=5
decimal.Decimal('1') / decimal.Decimal('3')
>>> Decimal('0.33333')
设置局部精度
with decimal.localcontext() as local:
local.prec = 3
print(decimal.Decimal('1') / decimal.Decimal('3'))
>>> 0.333
print(decimal.Decimal('1') / decimal.Decimal('3'))
>>> 0.33333