iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python中的decimal模块如何使用
  • 193
分享到

python中的decimal模块如何使用

2023-07-05 03:07:29 193人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容主要讲解“python中的decimal模块如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中的decimal模块如何使用”吧!1. Decimal类型的优点Decim

本篇内容主要讲解“python中的decimal模块如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Python中的decimal模块如何使用”吧!

1. Decimal类型的优点

Decimal类型是在浮点类型的基础上设计的,但是它在几个地方上要优于floating point:

1)Decimal类型可以非常精确地在计算机中存储,而学过c++的都知道,浮点型在计算机中是无法精确存储的,比如1.1和2.2在计算机中存储后,运算(1.1+2.2)表达式的值结果会是3.3000000000000003;Decimal类型则不会出现这种情况。同样,由于无法精确存储,浮点型也就无法精确计算(相对于Decimal类型),可以再测试(0.1+0.1+0.1-0.3)两种类型的计算结果。

2)Decimal类型会自动保留小数点后面不需要的0,以与输入的精度相匹配,比如下面小程序中的例子:浮点型的1.20+1.30结果是2.5;而Decimal类型结果是2.50,这样貌似比较人性化。

3)Decimal类型可以根据需要自己设置小数点后精度。通过getcontext().prec = x (x为你想要的精度来设置,getcontext()函数下面再详细介绍)。

4)Decimal类型有很强的管理功能,它能够根据需要设置,来控制输出的格式,得到或者忽略某类错误(如除0,可以设置忽略它,而得到一个Infinity的Decimal值)。

#difference between float and decimalprint(1.1+2.2)                    #3.3000000000000003print (Decimal('1.1')+Decimal('2.2'))  #3.3  print (0.1+0.1+0.1-0.3)    #5.551115123125783e-17print (Decimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.3')) # 0.0 print (1.20+1.30)                         #2.5print (Decimal('1.20')+Decimal('1.30'))   #2.50

需要注意的是,Decimal()的构造中如果是小数或字符的话,需要加上单引号;如果为整数,则不需要。

2. decimal模块的构成

文档说,decimal模块主要由三部分构成:the decimal number ,the context of arithmetic ,signals 。

1)decimal number是不可改变的常量,它也不会截取小数点后多余的0;除了正常的数外, 它还包括'Infinity','-Infinity','NaN'等数。

2)the context of arithmetic是当前计算环境的一些参数,包括精度位数prec,舍弃位数规则rounding,指数的最大值最小值Emin、Emax,科学计数法e的大小写Capitals,指数是否超出范围clamped,运算结果的标志flags,哪些操作要触发traps等。

3)signals是在运算过程中产生的一些状态,这些状态可以根据需要用来提示、忽略、报错等。
signals和flags、traps是对应的,假设运算过程中产生了除0这样一个状态,那么flags中就会产生一个DivisionByZero为1这样的信息,接着如果在traps中包含这个操作,那么python就会报个异常出来。这样一个处理机制,可以人为的设置自己需要的信息或异常提示,而把另外一些忽略。

3. context

可以用getcontext()函数得到当前运算环境的参数,直接打印 print (get context()),以我的为例子

Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, Overflow, DivisionByZero])
其中,prec精度为28,是默认值,可以通过getcontext().prec = 10这样来设置自己想要的精度;rounding的规则是ROUND_HALF_EVEN (具体下面介绍),此外还有其他一些规则,感兴趣的可以查阅文档或自己测试;traps数组表明当前如果出现这三种状态会报异常。当然,其中的参数都可以自己修改。

值得一提的是,精度值的修改只在运算中才会体现出来,比如精度是5,输入Decimal(’1.222222222‘),输出仍然是这个数;但是Decimal('1.222222222') + Decimal('1.11111111') 的结果精度就为6了。

除了可以通过getcontext().prec这样来修改context的参数,还可以使用setcontext()来一次性设置context。如下:

mycontext = Context(prec=18, rounding=ROUND_HALF_DOWN)setcontext(mycontext)

这里再学习一个比较有用的函数quantize(),当我们希望在运算过程中保持较高的精度,而在结果中以某种方式保留几位小数时可以用这个函数,下面是官网文档的示例:

Decimal('7.325').quantize(Decimal('.01'), rounding=ROUND_DOWN)Decimal('7.32')  #resultDecimal('7.325').quantize(Decimal('1.'), rounding=ROUND_UP)Decimal('8')     #result

4. Signals

decimal模块中提供了10种signals,下面简单介绍一下:

1)Clamped:越界,指数超出Emin或Emax范围;如果发生,则会在小数部分添加0来表示;

2)DecimalException;

3)DivisionByZero:在除法运算中出现,除数为0;如果不捕捉该错误,则返回Infinity或-Infinity;

4)Inexact:不精确,使用round函数舍弃的小数部分中包含除0以外的数字;

5)InvalidOperation:无效计算或计算无意义,比如两个无穷大相减等;如果不捕捉该错误,则返回NaN(Not a Number);

6)Overflow:在round后指数超出Emax范围,如果不捕捉,则根据round规则来判断返回什么值;

7)Rounded:如果round操作舍弃了小数,不管是不是0,都发生;如果不捕捉,则返回 值未改变;

8)SubnORMal:指数值过小;如果不捕捉,则返回  值不变; 

9)Underflow:指数值太小,且round操作向0逼近;

10)FloatOperation:如果不捕捉,则混合float型和Decimal型的操作可以执行;如果捕捉,则只有相等判断和显式转换可以执行,其余的都报错。

5. Round类型

Decimal中大致有以下几种类型,做简单介绍一下,如有错误,希望指正:

1)ROUND_UP:舍弃小数部分非0时,在前面增加数字,如 5.21 -> 5.3;

2)ROUND_DOWN:舍弃小数部分,从不在前面数字做增加操作,如5.21->5.2;

3)ROUND_CEILING:如果Decimal为正,则做ROUND_UP操作;如果Decimal为负,则做ROUND_DOWN操作;

4)ROUND_FLOOR:如果Decimal为负,则做ROUND_UP操作;如果Decimal为正,则做ROUND_DOWN操作;

5)ROUND_HALF_DOWN:如果舍弃部分>.5,则做ROUND_UP操作;否则,做ROUND_DOWN操作;

6)ROUND_HALF_UP:如果舍弃部分>=.5,则做ROUND_UP操作;否则,做ROUND_DOWN操作;

7)ROUND_HALF_EVEN:如果舍弃部分左边的数字是奇数,则做ROUND_HALF_UP操作;若为偶数,则做ROUND_HALF_DOWN操作;

#test Round rules #ROUND_UP & ROUND_DOWNprint (Decimal('8.532').quantize(Decimal('0.01'), rounding=ROUND_UP))  #8.54print (Decimal('-8.532').quantize(Decimal('0.01'), rounding=ROUND_UP)) #-8.54print (Decimal('8.530').quantize(Decimal('0.01'), rounding=ROUND_UP))  #8.53 print (Decimal('8.532').quantize(Decimal('0.01'), rounding=ROUND_DOWN))  #8.53print (Decimal('-8.532').quantize(Decimal('0.01'), rounding=ROUND_DOWN)) #8.53 #ROUND_CEILING & ROUND_FLOORprint (Decimal('8.532').quantize(Decimal('0.01'), rounding=ROUND_CEILING)) #8.54print (Decimal('-8.532').quantize(Decimal('0.01'), rounding=ROUND_CEILING))#-8.53 print (Decimal('8.532').quantize(Decimal('0.01'), rounding=ROUND_FLOOR)) #8.53print (Decimal('-8.532').quantize(Decimal('0.01'), rounding=ROUND_FLOOR)) #-8.54 #ROUND_HALF_print (Decimal('8.535').quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)) #8.54print (Decimal('8.534').quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)) #8.53 print (Decimal('8.535').quantize(Decimal('0.01'), rounding=ROUND_HALF_DOWN)) #8.53print (Decimal('8.534').quantize(Decimal('0.01'), rounding=ROUND_HALF_DOWN)) #8.53print (Decimal('8.536').quantize(Decimal('0.01'), rounding=ROUND_HALF_DOWN)) #8.54 print (Decimal('8.535').quantize(Decimal('0.01'), rounding=ROUND_HALF_EVEN)) #8.54print (Decimal('8.545').quantize(Decimal('0.01'), rounding=ROUND_HALF_EVEN)) #8.54

到此,相信大家对“python中的decimal模块如何使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: python中的decimal模块如何使用

本文链接: https://www.lsjlt.com/news/349325.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python中的decimal模块如何使用
    本篇内容主要讲解“python中的decimal模块如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python中的decimal模块如何使用”吧!1. Decimal类型的优点Decim...
    99+
    2023-07-05
  • Python decimal模块如何使用
    这篇文章主要介绍“Python decimal模块如何使用”,在日常操作中,相信很多人在Python decimal模块如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python&...
    99+
    2023-07-05
  • python中decimal模块的具体使用
    decimal模块主要的作用是精确小数,因为float是不精确的,只是无限接近,对于一些需要精确小数点后位数的就需要用decimal。 Decimal类型的优点 Decimal类型是...
    99+
    2023-01-29
    python decimal模块 python decimal
  • python中decimal模块怎么使用
    这篇文章主要介绍了python中decimal模块怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python中decimal模块怎么使用文章都会有所收获,下面我们一起来看看吧。查看python3.4.1...
    99+
    2023-07-05
  • python中decimal模块的用法
    目录1. Decimal类型的优点2. decimal模块的构成3. context4. Signals5. Round类型查看python3.4.1文档,发现对于decimal模块...
    99+
    2023-02-19
    python decimal模块 python decimal
  • Python中的logging模块如何使用
    一、低配logging日志总共分为以下五个级别,这个五个级别自下而上进行匹配 debug-->info-->warning-->error-->critical,默认最低级别为warning级别。1.v1import...
    99+
    2023-05-14
    Python logging
  • Python中的binascii模块如何使用
    这篇文章主要介绍“Python中的binascii模块如何使用”,在日常操作中,相信很多人在Python中的binascii模块如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的binas...
    99+
    2023-06-30
  • python中的xlwt模块如何使用
    这篇文章主要介绍“python中的xlwt模块如何使用”,在日常操作中,相信很多人在python中的xlwt模块如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python中的xlwt模块如何使用”的疑...
    99+
    2023-07-05
  • Python中base64模块如何使用
    Python中base64模块如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python base64模块是用来作base64编码解码的。这种编码方式在...
    99+
    2023-06-17
  • python中os模块如何使用
    这篇文章主要介绍了python中os模块如何使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python有哪些常用库python常用的库:1.requesuts;2.scr...
    99+
    2023-06-14
  • Python中 Collections 模块如何使用
    今天就跟大家聊聊有关Python中 Collections 模块如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。collections模块是一个不用不知道,一用就上瘾的模块。这...
    99+
    2023-06-15
  • Python中如何使用py2exe模块
    这期内容当中小编将会给大家带来有关Python中如何使用py2exe模块,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我们先准备一个简单的pythonPythonhello.py# hello....
    99+
    2023-06-17
  • Python中ConfigParser模块如何使用
    Python中ConfigParser模块如何使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并...
    99+
    2023-06-17
  • Python中如何使用mongodb模块
    这篇文章给大家介绍Python中如何使用mongodb模块,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。涉及到python和mongodb,那么安装相应的模块四必不可少的,最简单的安装...
    99+
    2024-04-02
  •  Python中logging模块如何使用
    这篇文章主要讲解了“ Python中logging模块如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ Python中logging模块如何使用”吧!1.为什么要用...
    99+
    2023-06-29
  • Python中httptools模块如何使用
    这篇文章主要介绍“Python中httptools模块如何使用”,在日常操作中,相信很多人在Python中httptools模块如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中httpto...
    99+
    2023-07-05
  • python中如何使用matplotlib模块
    这篇文章给大家介绍python中如何使用matplotlib模块,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  常见的激活函数效果图如下:  代码区:  #!E:\anaconda\python.exe  # -*-...
    99+
    2023-06-02
  • python中如何使用 String模块
    本篇文章为大家展示了python中如何使用 String模块,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。string成员常量:ascii_letters = 'abcd...
    99+
    2023-06-17
  • python中如何使用email模块
    python中如何使用email模块,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。说明email模块支持发送的邮件内容包括纯文本、HTML内容、图片和附件。email模块有几种...
    99+
    2023-06-20
  • python中如何使用smtplib模块
    python中如何使用smtplib模块,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。说明创建SMTP的操作对象,连接smtp目标服务器,可以是163、QQ等。根据您的账户...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作