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 相关文章推荐
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 Python
详解Django 中是否使用时区的区别
Jun 14 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
Python计算机视觉里的IOU计算实例
Jan 17 Python
Python运行DLL文件的方法
Jan 17 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
用Python绘制漫步图实例讲解
Feb 26 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
Mar 30 Python
解决pycharm下pyuic工具使用的问题
Apr 08 Python
如何理解Python中的变量
Jun 01 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&MYSQL分页原理及实现
2007/01/02 PHP
php扩展ZF――Validate扩展
2008/01/10 PHP
使用php来实现网络服务
2009/09/15 PHP
mayfish 数据入库验证代码
2010/04/30 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
php实现session共享的实例方法
2019/09/19 PHP
由prototype_1.3.1进入javascript殿堂-类的初探
2006/11/06 Javascript
超清晰的document对象详解
2007/02/27 Javascript
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
2017/07/17 jQuery
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
2018/01/20 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
介绍Python中的文档测试模块
2015/04/28 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
举例讲解Python装饰器
2020/12/24 Python
美国内衣品牌:Leonisa
2016/08/14 全球购物
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
Shell编程面试题
2016/05/29 面试题
文明寝室标语
2014/06/13 职场文书
装修活动策划方案
2014/08/27 职场文书
庆国庆国旗下讲话稿2014
2014/09/21 职场文书
党支部半年考察意见
2015/06/01 职场文书