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代码
Mar 13 Python
使用python编写批量卸载手机中安装的android应用脚本
Jul 21 Python
python中去空格函数的用法
Aug 21 Python
python输出指定月份日历的方法
Apr 23 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
python Elasticsearch索引建立和数据的上传详解
Aug 04 Python
Python实现的微信红包提醒功能示例
Aug 22 Python
python 使用csv模块读写csv格式文件的示例
Dec 02 Python
PyTorch中的拷贝与就地操作详解
Dec 09 Python
python des,aes,rsa加解密的实现
Jan 16 Python
在 Python 中利用 Pool 进行多线程
Apr 24 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
关于Intype一些小问题的解决办法
2008/03/28 PHP
php读取xml实例代码
2010/01/28 PHP
php 字符串压缩方法比较示例
2014/01/23 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
php中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
php英文单词统计器
2016/06/23 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
php实现分页功能的详细实例方法
2019/09/29 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
JavaScript访问样式表代码
2010/10/15 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
通过$(this)使用jQuery包装后的方法或属性
2014/05/18 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
Javascript中prototype与__proto__的关系详解
2018/03/11 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
Python多线程编程(六):可重入锁RLock
2015/04/05 Python
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
python实现求特征选择的信息增益
2018/12/18 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
苹果台湾官网:Apple台湾
2019/01/05 全球购物
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
教学督导岗位职责
2015/04/10 职场文书
2015中学学校工作总结
2015/07/20 职场文书
2016年教师节感言
2015/12/09 职场文书
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript