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中Inf与Nan的判断问题详解
Feb 08 Python
使用requests库制作Python爬虫
Mar 25 Python
python遍历小写英文字母的方法
Jan 02 Python
利用python实现在微信群刷屏的方法
Feb 21 Python
python快排算法详解
Mar 04 Python
详解Python字典的操作
Mar 04 Python
Form表单及django的form表单的补充
Jul 25 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
python制作朋友圈九宫格图片
Nov 03 Python
python基于exchange函数发送邮件过程详解
Nov 06 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 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
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
百度地图API使用方法详解
2015/08/25 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
jQuery实现跨域
2015/02/03 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
python的re正则表达式实例代码
2018/01/24 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
pandas通过索引进行排序的示例
2018/11/16 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
Python设计密码强度校验程序
2020/07/30 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
上海微创软件面试题
2012/06/14 面试题
请介绍一下WSDL的文档结构
2013/03/17 面试题
心得体会开头
2014/01/01 职场文书
大学生饮食连锁店创业计划书
2014/01/17 职场文书
云冈石窟导游词
2015/02/04 职场文书
文化大革命观后感
2015/06/17 职场文书
环保建议书作文500字
2015/09/14 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
HR必备:销售经理聘用合同范本
2019/08/21 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python