浅谈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 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
Feb 13 Python
Python中文件的读取和写入操作
Apr 27 Python
python删除文件夹下相同文件和无法打开的图片
Jul 16 Python
django的auth认证,authenticate和装饰器功能详解
Jul 25 Python
python实现将视频按帧读取到自定义目录
Dec 10 Python
python异步Web框架sanic的实现
Apr 27 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 Python
Python尾递归优化实现代码及原理详解
Oct 09 Python
Python使用scapy模块发包收包
May 07 Python
Python图片检索之以图搜图
May 31 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学习教程之第1天
2008/06/15 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
js 跨域和ajax 跨域问题小结
2009/07/01 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
基于NodeJS的前后端分离的思考与实践(二)模版探索
2014/09/26 NodeJs
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
Jquery元素追加和删除的实现方法
2016/05/24 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
Python实现合并字典的方法
2015/07/07 Python
python函数局部变量用法实例分析
2015/08/04 Python
Python缩进和冒号详解
2016/06/01 Python
python模块之time模块(实例讲解)
2017/09/13 Python
python地震数据可视化详解
2019/06/18 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
通过实例学习Python Excel操作
2020/01/06 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
旷课检讨书3000字
2014/02/04 职场文书
电子工程求职信
2014/07/17 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
JavaScript实现显示和隐藏图片
2021/04/29 Javascript
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js
MySQL提取JSON字段数据实现查询
2022/04/22 MySQL