python decimal(小数)模块

本文深入探讨Python内置decimal模块的使用方法,包括如何控制浮点数精度,避免浮点运算误差,以及通过小数上下文管理器实现局部精度调整,适合需要精确计算的场景如金融交易。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Django中遇到商品金额时只知道使用decimalfiled,但是并不是特别了解底层的python decimal模块,偶然看书学习到这块,做个记录跟博友们一起分享。

decimal 模块是python内置模块, 不需要安装,直接导入即可

import decimal

简单使用

d = decimal.Decimal('3.1415926')

在python3环境中,这里最好传入一个字符串,如果传入了一个浮点型,decimal对象的浮点精度得不到保证。

想要控制浮点精度时,可以通过

decimal.getcontext().prec = 3

执行完这条语句后,所有非直接通过直创建得来的decimal对象,比如通过计算得来的decimal对象,输出时的精度都将以这条赋值的精度为准,本质是设置了全局精度。

也可以使用小数上下文管理器,重新 设置一个临时小数精度。在语句退出后,精度重新设为初始值。

执行代码

d = decimal.Decimal(3) 
a = decimal.Decimal(3.1415926)
print(d) # 3
print(a) # 3.14159260000000006840537025709636509418487548828125
print(d+a+a) # 9.283185200000000136810740514

#设置全局精度
decimal.getcontext().prec = 2
d = decimal.Decimal(3) 
a = decimal.Decimal('3.1415926')
print(d) # 3
print(a) # 3.1415926
print(d+a+a) # 9.28

#小数上下文管理器
with decimal.localcontext() as ctx": 
    ctx.prec = 3
    print(d+a+a) # 9.283
 
#管理器语句退出后,精度恢复
print(a+a) # 6.28
print(d+a) # 6.14

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值