Decimal模块用于高精度十进制运算,适合金融计算。1. 推荐用字符串创建Decimal避免float误差;2. 相比float,Decimal可精确计算如0.1+0.2=0.3;3. 通过getcontext设置精度和舍入方式;4. 支持常规运算与类型转换;5. 建议始终用字符串初始化,避免float。
Python 的 decimal 模块用于执行十进制浮点数运算,特别适合需要精确计算的场景,比如金融计算。相比内置的 float 类型,它避免了二进制浮点数带来的精度误差。
先导入模块,使用 Decimal 类创建高精度数值:
from decimal import Decimal
Decimal 可以通过字符串或整数初始化,推荐用字符串避免 float 本身带来的误差:
Decimal('0.1') ✅ 推荐
Decimal(0.1) ❌ 不推荐(因为 0.1 在 float 中不精确)对比 float 和 Decimal 的差异:
# 使用 float(有精度问题)
print(0.1 + 0.2) # 输出:0.30000000000000004使用 Decimal(精确)
print(Decimal('0.1') + Decimal('0.2')) # 输出:0.3
可以通过 getcontext() 设置全局精度和舍入规则:
from decimal import Decimal, getcontextgetcontext().prec = 6 # 设置精度为6位
getcontext().rounding = 'ROUND_HALF_UP' # 设置舍入方式result = Decimal('1') / Decimal('7')
print(result) # 输出:0.142857
常见舍入方式包括:ROUND_FLOOR、ROUND_CEILING、ROUND_HALF_EVEN 等。
float(d) → 转为浮点数int(d) → 截断取整基本上就这些。decimal 模块用起来不复杂,但能有效解决精度问题。