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 02 Python
python+requests+unittest API接口测试实例(详解)
Jun 10 Python
Python探索之pLSA实现代码
Oct 25 Python
从django的中间件直接返回请求的方法
May 30 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
Python基础之函数的定义与使用示例
Mar 23 Python
python的依赖管理的实现
May 14 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
Sep 23 Python
Python代码中如何读取键盘录入的值
May 27 Python
Win10环境中如何实现python2和python3并存
Jul 20 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数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
Python实现二叉堆
2016/02/03 Python
Python 函数基础知识汇总
2018/03/09 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
Etam德国:内衣精品店
2019/08/25 全球购物
Haggar官网:美国男装品牌
2020/02/16 全球购物
华为c/c++笔试题
2016/01/25 面试题
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
学院书画协会部门职责
2013/11/28 职场文书
网络事业创业计划书范文
2014/01/09 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
医学生毕业自我鉴定
2014/03/26 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
第一军规观后感
2015/06/12 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
如何用JS实现简单的数据监听
2021/05/06 Javascript
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库
python manim实现排序算法动画示例
2022/08/14 Python