浅谈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下singleton模式的实现方法
Jul 16 Python
Python中逗号的三种作用实例分析
Jun 08 Python
Python 多进程和数据传递的理解
Oct 09 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
Python3.5集合及其常见运算实例详解
May 01 Python
python 判断文件还是文件夹的简单实例
Jun 10 Python
详解Python打包分发工具setuptools
Aug 05 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
Jan 03 Python
Win10环境中如何实现python2和python3并存
Jul 20 Python
python实现取余操作的简单实例
Aug 16 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
phpwind中的数据库操作类
2007/01/02 PHP
php session 预定义数组
2009/03/16 PHP
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
浅析Cookie中的Path与domain
2013/12/18 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
JavaScript中匿名函数用法实例
2015/03/23 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
python print出共轭复数的方法详解
2019/06/25 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
音乐系毕业生自荐信
2013/10/27 职场文书
高中自我评价范文
2014/01/27 职场文书
2014学年自我鉴定
2014/02/23 职场文书
农民工工资支付承诺函
2014/03/31 职场文书
公务员政审材料范文
2014/12/23 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
文明礼仪主题班会
2015/08/13 职场文书