浅谈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实现随机密码字典生成器示例
Apr 09 Python
python使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 Python
python操作sqlite的CRUD实例分析
May 08 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
python调用百度语音识别api
Aug 30 Python
python爬虫获取新浪新闻教学
Dec 23 Python
python生成器与迭代器详解
Jan 01 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
Dec 22 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
Jan 03 Python
Selenium元素定位的30种方式(史上最全)
May 11 Python
python3字符串输出常见面试题总结
Dec 01 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
PHP设计模式之工厂模式详解
2017/10/24 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
纯JS实现轮播图
2017/02/22 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
Angular5中状态管理的实现
2018/09/03 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
中专生自我鉴定
2013/12/17 职场文书
大学生毕业鉴定
2014/01/31 职场文书
励志演讲稿范文
2014/04/29 职场文书
职务说明书范文
2014/05/07 职场文书
异地恋情人节寄语
2015/02/28 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
十大最强飞行系宝可梦,BUG燕上榜,第二是飞行系王者
2022/03/18 日漫