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读写Excel文件方法介绍
Nov 22 Python
Python pickle模块用法实例
Apr 14 Python
Python 判断文件或目录是否存在的实例代码
Jul 19 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
详解用python生成随机数的几种方法
Aug 04 Python
python中使用while循环的实例
Aug 05 Python
Python的互斥锁与信号量详解
Sep 12 Python
python如何将两个txt文件内容合并
Oct 18 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
Feb 27 Python
Scrapy 配置动态代理IP的实现
Sep 28 Python
Python读写csv文件流程及异常解决
Oct 20 Python
python实现学员管理系统(面向对象版)
Jun 05 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制作文本式留言板
2015/03/18 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
laravel 框架执行流程与原理简单分析
2020/02/01 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
Javascript 类与静态类的实现
2010/04/01 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
layer.open 按钮的点击事件关闭方法
2018/08/17 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
Python  连接字符串(join %)
2008/09/06 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
Flask核心机制之上下文源码剖析
2018/12/25 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
实现Python与STM32通信方式
2019/12/18 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
Java面试题汇总
2015/12/06 面试题
关爱留守儿童倡议书
2014/04/15 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
法人代表证明书范本
2015/06/18 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android