浅谈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 相关文章推荐
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
Mar 19 Python
numpy使用fromstring创建矩阵的实例
Jun 15 Python
python读取和保存图片5种方法对比
Sep 12 Python
对Python中for复合语句的使用示例讲解
Nov 01 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
Feb 21 Python
Django实现学员管理系统
Feb 26 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
numpy.ndarray 实现对特定行或列取值
Dec 05 Python
Python json读写方式和字典相互转化
Apr 18 Python
python mock测试的示例
Oct 19 Python
python 解决函数返回return的问题
Dec 05 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为什么选mysql作为数据库? Mysql 创建用户方法
2007/07/02 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
PHP可逆加密/解密函数分享
2012/09/25 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
2015/08/22 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
Python的Flask框架中web表单的教程
2015/04/20 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
班风学风建设方案
2014/05/06 职场文书
大学生赌博检讨书
2014/09/22 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
使用scrapy实现增量式爬取方式
2022/06/21 Python
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python