在我们开发工作中浮点类型的使用还是比较普遍的,对于一些涉及资金金额的计算更是不能有丝毫误差,Python 的 decimal 模块为浮点型精确计算提供了支持。
1.简介
decimal 模块设计以十进制数、算术上下文和信号这三个概念为中心。十进制数是不可变的,它有一个符号,系数数字和一个指数,为了保持重要性,系数数字不会截断尾随零,十进制数也有特殊值,
如:Infinity、-Infinity 和 NaN;算术上下文是指定精度、舍入规则、指数限制、指示操作结果的标志以及确定符号是否被视为异常的陷阱启用器的环境;信号是在计算过程中出现的异常条件组。对于 decimal 模块的设计原则,我们只需简单了解即可。
2.快速上手
Decimal
我们看一下 Decimal 实例的基本使用。示例如下:
from decimal import *
print(Decimal(1.1) + Decimal(3.3))
print(Decimal(1.1) - Decimal(3.3))
print(Decimal(1.1) * Decimal(3.3))
print(Decimal(1.1) / Decimal(3.3))
#输出结果
'''
4.399999999999999911182158030
-2.199999999999999733546474090
3.630000000000000097699626167
0.3333333333333333781908292778
'''
使用 getcontext().prec 设定有效数字。示例如下:
from decimal import *
print(Decimal(1.1) / Decimal(3.3))
getcontext().prec = 2
print(Decimal(1.1) / Decimal(3.3))
#输出结果
'''
0.3333333333333333781908292778
0.33
'''
设置小数位数。示例如下:
from decimal import *
print(Decimal(1.1) / Decimal(3.3))
print((Decimal(1.1) / Decimal(3.3)).quantize(Decimal('0.00')))
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:153708845
#输出结果
'''
0.3333333333333333781908292778
0.33
'''
转成字符串。示例如下:
from decimal import *
str(Decimal('1.23465689').quantize(Decimal('0.00')))
adjusted()
在移出系数最右边的数字之后返回调整后的指数,直到只剩下前导数字,该函数用于确定最高有效位相对于小数点的位置。示例如下:
from decimal import *
print(Decimal('321e+5').adjusted())
compare(other, context=None)
比较两个 Decimal 实例的值。示例如下:
from decimal import *
print(Decimal(3.3).compare(Decimal(1.1)))
copy_abs()
返回参数的绝对值。示例如下:
from decimal import *
print(Decimal('-3.3').copy_abs())
is_normal(context=None)
如果参数是一个有限正规数,返回 True,如果参数是 0、次正规数、无穷大或是 NaN,返回 False。示例如下:
from decimal import *
print(Decimal(1).is_normal())
is_zero()
如果参数是 0,则返回 True,否则返回 False。示例如下:
from decimal import *
print(Decimal(0).is_zero())
ln(context=None)
返回操作数的自然对数(以 e 为底)。示例如下:
from decimal import *
print(Decimal(1).ln())
log10(context=None)
返回操作数的自然对数(以 10 为底)。示例如下:
from decimal import *
print(Decimal(10).log10())
max(other, context=None)
比较两个数值大小,并返回大的值。示例如下:
from decimal import *
print(Decimal(1.1).max(Decimal(2.2)))
max_mag(other, context=None)
比较两个数绝对值大小,并返回绝对值大的值。示例如下:
from decimal import *
print(Decimal(-3.3).max_mag(Decimal(1.1)))
min(other, context=None)
比较两个数值大小,并返回小的值。示例如下:
from decimal import *
print(Decimal(1.1).min(Decimal(2.2)))
min_mag(other, context=None)
比较两个数绝对值大小,并返回绝对值小的值。示例如下:
from decimal import *
print(Decimal(-3.3).min_mag(Decimal(1.1)))
is_signed()
如果参数带有负号,则返回为 True,否则返回 False。示例如下:
from decimal import *
print(Decimal(-3).is_signed())
总结
本节给大家介绍了 decimal 模块的一些概念和基本使用,对 Python 工程师使用 decimal 模块提供了支撑。
- 优缺点剖析得胜pck500和pck200区别有没有?说说哪个好?老司机揭秘测评查看: 7435|回复: 5 [软文] 优缺点剖析得胜pck500和pck200区别有没有?说说哪个好?老司机揭秘测评 [复制链接] phr*** phr*** 当前离线 积分117065 在线时...
- 儿童视频app有哪些-儿童视频播放器大全-儿童视频手机软件下载儿童视频软件是可以让儿童进行独自使用的视频播放器,内容包含了动画片、幼教、英语、儿歌、儿童故事等等,是专门为宝宝们量身打造。而...
- 无需任何工具发送定时QQ消息有时我们会因为种种原因需要给QQ好友在特定时间发送QQ消息,比如庆祝节日或者生日,又或者只是一些提醒事项。但QQ并没有自带定时发送消息...
- SCANCO MEDICAL 介绍SCANCO MEDICAL 介绍 瑞士SCANCO Medical AG 公司(www.scanco.ch) 成立于 1988 年,位于瑞士精工产品制造中心苏黎世的巴塞多夫(Bassersdorf, Zurich, Switzerland),2008...
- 心动的意思动 [ dòng ] 1. 改变原来位置或脱离静止状态,与“静”相对。 如 变动。波动。浮动。振动(物体通过一个中心位置,不断作往复运动。亦称“振...
- 奇情寐语文件大小:2.17 mb。 文件格式:epub 格式。 书籍内容: 版权信息 奇情寐语 作 者:吴沉水等 责任编辑:管 文 装帧设计:羲 日 刘珍珍 封面绘图...
- 重磅!2024年度影响因子发布:地学类期刊一览表2024年6月20日,英国伦敦——科睿唯安今天发布2024年度《期刊引证报告》(JCR™)。报告覆盖全面的高质量期刊资源,并按学科进行排名,便于...
- 赛诺数据:金立S10发力,金立夺中端市场增速第一自进入2017年,智能手机市场饱和程度更加明显。由于同质化严重与现有产品创新乏力,消费者在购买手机时更加谨慎,近日,知名市场调研机构...
- vue开发过程中,修改了数据,但是页面死活不渲染改变!没变化!怎么办?6种方法解决~为什么选择阿里云什么是云计算全球基础设施技术领先稳定可靠安全合规分析师报告产品和定价全部产品免费试用产品动态产品定价配置报价器...
- 穿越火线这张被删的生化地图,背后隐藏了这么多的秘密!如果你是穿越火线的老玩家,想必你一定知道一张穿越火线的生化老地图,这张地图很少有玩家记得住,但是,这张图却是剧情最为密集的地方...