浅谈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程序设计入门(3)数组的使用
Jun 16 Python
Python实现Linux中的du命令
Jun 12 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
Apr 15 Python
numpy.meshgrid()理解(小结)
Aug 01 Python
Jupyter Notebook的连接密码 token查询方式
Apr 21 Python
套娃式文件夹如何通过Python批量处理
Aug 23 Python
python查询MySQL将数据写入Excel
Oct 29 Python
重构Python代码的六个实例
Nov 25 Python
Python编写nmap扫描工具
Jul 21 Python
Python制作春联的示例代码
Jan 22 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全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
PHP中session变量的销毁
2014/02/27 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
php中preg_replace_callback函数简单用法示例
2016/07/21 PHP
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
2018/09/20 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
[02:56]DOTA2英雄基础教程 巨魔战将
2013/12/10 DOTA
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
python实现自动解数独小程序
2019/01/21 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
python线程中的同步问题及解决方法
2019/08/29 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
python利用platform模块获取系统信息
2020/10/09 Python
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
资深财务管理人员自我评价
2013/09/22 职场文书
美容院营销方案
2014/03/05 职场文书
努力学习保证书
2015/02/26 职场文书
导游词之天津盘山
2019/11/01 职场文书