Python decimal模块使用方法详解


Posted in Python onJune 08, 2020

decimal 模块:decimal意思为十进制,这个模块提供了十进制浮点运算支持

1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。

2.要从浮点数据转换为Decimal类型

from decimal import *
Decimal.from_float(12.222)
# 结果为Decimal('12.2219999999999995310417943983338773250579833984375')

3.通过设定有效数字,限定结果样式

from decimal import *
getcontext().prec = 6
Decimal(1)/Decimal(7)
# 结果为Decimal('0.142857'),六个有效数字

4.四舍五入,保留几位小数

from decimal import *
Decimal('50.5679').quantize(Decimal('0.00'))
# 结果为Decimal('50.57'),结果四舍五入保留了两位小数

5.Decimal 结果转化为string

from decimal import *
str(Decimal('3.40').quantize(Decimal('0.0')))
# 结果为'3.4',字符串类型

Python3中decimal处理计算精度问题示例

#!/usr/bin/python3
# coding:utf-8
import decimal
from decimal import Decimal, getcontext

def demo():
  """
  取整问题:
  ROUND_CEILING 总是趋向无穷大向上取整
ROUND_DOWN 总是趋向0取整

ROUND_FLOOR 总是趋向负无穷大向下取整

ROUND_HALF_DOWN 如果最后一个有效数字大于或等于5则朝0反方向取整;否则,趋向0取整

ROUND_HALF_EVEN 类似于ROUND_HALF_DOWN,不过,如果最后一个有效数字值为5,则会检查前一位。
          偶数值会导致结果向下取整,奇数值导致结果向上取整

ROUND_HALF_UP 类似于ROUND_HALF_DOWN,不过如果最后一位有效数字为5,值会朝0的反方向取整

ROUND_UP 朝0的反方向取整

ROUND_05UP 如果最后一位是0或5,则朝0的反方向取整;否则向0取整
  """

  # 1.常规计算
  getcontext().prec = 9
  r1 = Decimal(1) / Decimal(3)
  print("r1 ", r1) # r1 0.333333333

  # 2.但是getcontext().prec会包含小数点前面的所有长度,当前面长度有变化时并不能固定控制小数点后的位数
  r2 = Decimal(10) / Decimal(3)
  print("r2 ", r2) # r2 3.33333333

  # 3.想要固定控制小数点后面的位数则需要使用decimal.quantize(Decimal('0.00000000')),注意不能超过getcontext().prec的位数
  r3 = Decimal(1) / Decimal(3)
  print("r3 ", r3.quantize(Decimal('0.00000000'))) # r3 0.33333333
  r4 = Decimal(10) / Decimal(3)
  print("r4 ", r4.quantize(Decimal('0.00000000'))) # r4 3.33333333
  r5 = Decimal(10) / Decimal(str(1.5))
  print("r5 ", r5.quantize(Decimal('0.00000000'))) # r5 6.66666667

  # 4.向上取整
  getcontext().rounding = getattr(decimal, 'ROUND_CEILING') # 总是趋向无穷大向上取整
  r6 = Decimal(10) / Decimal(str(1.5)) # r6 6.66666667
  print("r6 ", r6.quantize(Decimal('0.00000000')))
  r7 = Decimal(10) / Decimal(3) # r7 3.33333334
  print("r7 ", r7.quantize(Decimal('0.00000000')))

  # 5.向下取整
  getcontext().rounding = getattr(decimal, 'ROUND_FLOOR') # 总是趋向无穷大向下取整
  r8 = Decimal(10) / Decimal(str(1.5)) # r8 6.66666666
  print("r8 ", r8.quantize(Decimal('0.00000000')))
  r9 = Decimal(10) / Decimal(3) # r9 3.33333333
  print("r9 ", r9.quantize(Decimal('0.00000000')))

if __name__ == '__main__':
  demo()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python多线程抓取天涯帖子内容示例
Apr 03 Python
SQLite3中文编码 Python的实现
Jan 11 Python
PyQt5每天必学之日历控件QCalendarWidget
Apr 19 Python
pandas进行数据的交集与并集方式的数据合并方法
Jun 27 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
Python实现的特征提取操作示例
Dec 03 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
解决django同步数据库的时候app models表没有成功创建的问题
Aug 09 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
Apr 13 Python
python 开心网和豆瓣日记爬取的小爬虫
May 29 Python
Pygame Draw绘图函数的具体使用
Nov 17 Python
深入了解python列表(LIST)
Jun 08 #Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 #Python
基于python实现matlab filter函数过程详解
Jun 08 #Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 #Python
Python3通过chmod修改目录或文件权限的方法示例
Jun 08 #Python
win10下python3.8的PIL库安装过程
Jun 08 #Python
python rolling regression. 使用 Python 实现滚动回归操作
Jun 08 #Python
You might like
终于听上了直流胆调频
2021/03/02 无线电
用PHP调用数据库的存贮过程
2006/10/09 PHP
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
全系IE支持Bootstrap的解决方法
2015/10/19 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
微信小程序select下拉框实现效果
2019/05/15 Javascript
js实现可爱的气泡特效
2020/09/05 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
Python脚本实现集群检测和管理功能
2015/03/06 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
python利用小波分析进行特征提取的实例
2019/01/09 Python
Python异常处理知识点总结
2019/02/18 Python
在pycharm中显示python画的图方法
2019/08/31 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
解决Python安装cryptography报错问题
2020/09/03 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
英国最好的温室之家:Greenhouses Direct
2019/07/13 全球购物
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
电话销售经理岗位职责
2013/12/07 职场文书
单位单身证明范本
2014/01/11 职场文书
校运会广播稿100字
2014/01/27 职场文书
积极向上的团队口号
2014/06/06 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
《开国大典》教学反思
2016/02/16 职场文书