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 22 Python
轻松掌握python设计模式之策略模式
Nov 18 Python
python try except返回异常的信息字符串代码实例
Aug 15 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
Feb 13 Python
python中的 zip函数详解及用法举例
Feb 16 Python
python对文件的操作方法汇总
Feb 28 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
tensorflow图像裁剪进行数据增强操作
Jun 30 Python
python tqdm实现进度条的示例代码
Nov 10 Python
详解python3类型注释annotations实用案例
Jan 20 Python
Python datetime模块的使用示例
Feb 02 Python
详解解Django 多对多表关系的三种创建方式
Aug 23 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_data_seek]
2012/11/01 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
jquery 输入框数字限制插件
2009/11/10 Javascript
JQuery live函数
2010/12/24 Javascript
javascript动态控制服务器控件实例
2014/09/05 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
js密码强度检测
2016/01/07 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
2020/01/21 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
Element Breadcrumb 面包屑的使用方法
2020/07/26 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
Python 字符串中的字符倒转
2008/09/06 Python
详解Python发送邮件实例
2016/01/10 Python
python 用下标截取字符串的实例
2018/12/25 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
工程力学专业毕业生求职信
2013/10/06 职场文书
运动会邀请函范文
2014/01/31 职场文书
2014幼儿园教师师德师风演讲稿
2014/09/10 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers