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 ElementTree 基本读操作示例
Apr 09 Python
跟老齐学Python之传说中的函数编写条规
Oct 11 Python
python通过字典dict判断指定键值是否存在的方法
Mar 21 Python
微信跳一跳自动运行python脚本
Jan 08 Python
儿童学习python的一些小技巧
May 27 Python
Python Matplotlib库安装与基本作图示例
Jan 09 Python
python ipset管理 增删白名单的方法
Jan 14 Python
pymongo中聚合查询的使用方法
Mar 22 Python
Python实现简单的列表冒泡排序和反转列表操作示例
Jul 10 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 Python
Python多线程thread及模块使用实例
Apr 28 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 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调用Webservice实例代码
2011/07/29 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
优化Node.js Web应用运行速度的10个技巧
2014/09/03 Javascript
javascript去除字符串左右两端的空格
2015/02/05 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
详解python中的文件与目录操作
2017/07/11 Python
pycharm远程调试openstack的图文教程
2017/11/21 Python
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
Python下简易的单例模式详解
2019/04/08 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
简单了解python gevent 协程使用及作用
2019/07/22 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
春秋航空官方网站:Spring Airlines
2017/09/27 全球购物
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
一些Unix笔试题和面试题
2012/09/25 面试题
文职个人求职信范文
2013/09/23 职场文书
教师评语大全
2014/04/28 职场文书
社区安全生产月活动总结
2014/07/05 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
共青团员自我评价
2015/03/10 职场文书
Java使用HttpClient实现文件下载
2022/08/14 Java/Android