浅谈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中的With语句
Feb 02 Python
详解Python中的条件判断语句
May 14 Python
梯度下降法介绍及利用Python实现的方法示例
Jul 12 Python
python机器学习理论与实战(六)支持向量机
Jan 19 Python
python docx 中文字体设置的操作方法
May 08 Python
Python实现随机漫步功能
Jul 09 Python
Django2.1.3 中间件使用详解
Nov 26 Python
Python根据成绩分析系统浅析
Feb 11 Python
python中struct模块之字节型数据的处理方法
Aug 27 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
Django 简单实现分页与搜索功能的示例代码
Nov 07 Python
python程序如何进行保存
Jul 03 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设计模式 Singleton(单例模式)
2011/06/26 PHP
php获取当前时间的毫秒数的方法
2014/01/26 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
XP折叠菜单&仿QQ2006菜单
2006/12/16 Javascript
firefox火狐浏览器与与ie兼容的2个问题总结
2010/07/20 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
JavaScript实现左侧菜单效果
2017/12/14 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
原生js实现点击轮播切换图片
2020/02/11 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
windows下ipython的安装与使用详解
2016/10/20 Python
python模块之time模块(实例讲解)
2017/09/13 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
python使用pymongo与MongoDB基本交互操作示例
2020/04/09 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
创业融资计划书
2014/04/25 职场文书
安全教育主题班会总结
2015/08/14 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书