浅谈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实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 Python
Python自动扫雷实现方法
Jul 25 Python
Python中pygame安装方法图文详解
Nov 11 Python
Python开发如何在ubuntu 15.10 上配置vim
Jan 25 Python
Python如何实现MySQL实例初始化详解
Nov 06 Python
Python语言描述机器学习之Logistic回归算法
Dec 21 Python
Python日志模块logging基本用法分析
Aug 23 Python
Python tkinter三种布局实例详解
Jan 06 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
Jan 13 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
Feb 27 Python
keras 解决加载lstm+crf模型出错的问题
Jun 10 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
Feb 25 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实现jQuery扩展函数
2009/10/30 PHP
php 缩略图实现函数代码
2011/06/23 PHP
超小PHP小马小结(方便查找后门的朋友)
2012/05/05 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
package.json各个属性说明详解
2020/03/11 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
[34:27]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第一局
2016/02/26 DOTA
Python导入txt数据到mysql的方法
2015/04/08 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
简单了解python变量的作用域
2019/07/30 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
采购部2015年度工作总结
2015/07/24 职场文书