浅谈Python里面小数点精度的控制


Posted in Python onJuly 16, 2018

要求较小的精度

round()内置方法

这个是使用最多的,刚看了round()的使用解释,也不是很容易懂。round()不是简单的四舍五入的处理方式。

For the built-in types supporting round(), values are rounded to the closest multiple of 10 to the power minus ndigits; if two
multiples are equally close, rounding is done toward the even choice (so, for example, both round(0.5) and round(-0.5) are 0, and

round(1.5) is 2).

>>> round(2.5)
3.0
>>> round(-2.5)
-3.0
>>> round(2.675)
3.0
>>> round(2.675,2)
2.67

round()如果只有一个数作为参数,不指定位数的时候,返回的是一个整数,而且是最靠近的整数。一般情况是使用四舍五入的规则,但是碰到舍入的后一位为5的情况,如果要取舍的位数前的数是偶数,则直接舍弃,如果奇数这向上取舍。看下面的示例:

>>> round(2.555,2)
2.56
>>> round(2.565,2)
2.56
>>> round(2.575,2)
2.58
>>> round(2.585,2)
2.58

使用格式化

效果和round()是一样的。

>>> a = ("%.2f" % 2.555)
>>> a
'2.56'
>>> a = ("%.2f" % 2.565)
>>> a
'2.56'
>>> a = ("%.2f" % 2.575)
>>> a
'2.58'
>>> a = ("%.2f" % 2.585)
>>> a
'2.58'
>>> a = int(2.5)
>>> a
2

要求超过17位的精度分析

python默认的是17位精度,也就是小数点后16位,但是这里有一个问题,就是当我们的计算需要使用更高的精度(超过16位小数)的

时候该怎么做呢?

高精度使用decimal模块,配合getcontext

>>> from decimal import *
>>> print(getcontext())
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
>>> getcontext().prec = 50
>>> b = Decimal(1)/Decimal(3)
>>> b
Decimal('0.33333333333333333333333333333333333333333333333333')
>>> c = Decimal(1)/Decimal(7)
>>> c
Decimal('0.14285714285714285714285714285714285714285714285714')
>>> float(c)
0.14285714285714285

默认的context的精度是28位,可以设置为50位甚至更高,都可以。这样在分析复杂的浮点数的时候,可以有更高的自己可以控制的精度。其实可以留意下context里面的这rounding=ROUND_HALF_EVEN 参数。ROUND_HALF_EVEN, 当half的时候,靠近

even.

使用格式化(不推荐)

>>> a = ("%.30f" % (1.0/3))
>>> a
'0.333333333333333314829616256247'

可以显示,但是不准确,后面的数字基本没有意义。

关于小数和取整

既然说到小数,就必然要说到整数。一般取整会用到这些函数:

round()

这个不说了,前面已经讲过了。一定要注意它不是简单的四舍五入,而是ROUND_HALF_EVEN的策略。

math模块的ceil(x)

取大于或者等于x的最小整数。

math模块的floor(x)

去小于或者等于x的最大整数。

>>> from math import ceil, floor
>>> round(2.5)
2
>>> ceil(2.5)
3
>>> floor(2.5)
2
>>> round(2.3)
2
>>> ceil(2.3)
3
>>> floor(2.3)
2

以上这篇浅谈Python里面小数点精度的控制就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 正则表达式 概述及常用字符
May 04 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 Python
python中实现控制小数点位数的方法
Jan 24 Python
python制作填词游戏步骤详解
May 05 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 Python
图文详解Django使用Pycharm连接MySQL数据库
Aug 09 Python
python中下标和切片的使用方法解析
Aug 27 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
详解使用Python下载文件的几种方法
Oct 13 Python
使用Python构造hive insert语句说明
Jun 06 Python
OpenCV+Python3.5 简易手势识别的实现
Dec 21 Python
详解Django中间件执行顺序
Jul 16 #Python
转换科学计数法的数值字符串为decimal类型的方法
Jul 16 #Python
python 不以科学计数法输出的方法
Jul 16 #Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 #Python
Python中的Django基本命令实例详解
Jul 15 #Python
完美解决python中ndarray 默认用科学计数法显示的问题
Jul 14 #Python
python爬取哈尔滨天气信息
Jul 14 #Python
You might like
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
php读取xml实例代码
2010/01/28 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
围观tangram js库
2010/12/28 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
javascript中普通函数的使用介绍
2013/12/19 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
简单实现js无缝滚动效果
2017/02/05 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
Python字典及字典基本操作方法详解
2018/01/30 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
函授大学生自我鉴定
2014/02/05 职场文书
党员岗位承诺书
2014/03/25 职场文书
初中英语教学反思范文
2016/02/15 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书