浅谈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实现调用其他python脚本的方法
Oct 05 Python
Python中用于转换字母为小写的lower()方法使用简介
May 19 Python
python对DICOM图像的读取方法详解
Jul 17 Python
Python中表示字符串的三种方法
Sep 06 Python
Python插件virtualenv搭建虚拟环境
Nov 20 Python
Python实现的rsa加密算法详解
Jan 24 Python
Python2.7环境Flask框架安装简明教程【已测试】
Jul 13 Python
python实现对图片进行旋转,放缩,裁剪的功能
Aug 07 Python
Python实现鼠标自动在屏幕上随机移动功能
Mar 14 Python
Python中json.dumps()函数的使用解析
May 17 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 Python
如何利用Python实现n*n螺旋矩阵
Jan 18 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
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
js word表格动态添加代码
2010/06/07 Javascript
jquery实现文本框鼠标右击无效以及不能输入的代码
2010/11/05 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
JQuery样式操作、click事件以及索引值-选项卡应用示例
2019/05/14 jQuery
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
原生js生成图片验证码
2020/10/11 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
Python的面向对象思想分析
2015/01/14 Python
python中函数传参详解
2016/07/03 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
Python气泡提示与标签的实现
2020/04/01 Python
python except异常处理之后不退出,解决异常继续执行的实现
2020/04/25 Python
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
某某同志考察材料
2014/05/28 职场文书
2014年体育教师工作总结
2014/12/03 职场文书
烟台的海导游词
2015/02/02 职场文书
人事行政主管岗位职责
2015/04/09 职场文书