python decimal(小数)模块

python 基础 同时被 2 个专栏收录
10 篇文章 0 订阅
15 篇文章 0 订阅

在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

 

  • 4
    点赞
  • 0
    评论
  • 8
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值