浅谈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使用函数默认值实现函数静态变量的方法
Aug 18 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
Apr 11 Python
Python实现简单的四则运算计算器
Nov 02 Python
Python爬虫设置代理IP的方法(爬虫技巧)
Mar 04 Python
对Python中gensim库word2vec的使用详解
May 08 Python
python3处理含有中文的url方法
May 10 Python
python实时监控cpu小工具
Jun 21 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
Nov 29 Python
python代码 FTP备份交换机配置脚本实例解析
Aug 01 Python
python TCP包注入方式
May 05 Python
Python Pillow(PIL)库的用法详解
Sep 19 Python
分享7个 Python 实战项目练习
Mar 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
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
jquery tools之tooltip
2009/07/25 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
JS中作用域以及变量范围分析
2020/07/18 Javascript
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
python得到单词模式的示例
2018/10/15 Python
机器学习实战之knn算法pandas
2019/06/22 Python
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
大整数数相乘的问题
2012/07/22 面试题
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
《北大荒的秋天》教学反思
2014/04/14 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
工作检讨书大全
2015/01/26 职场文书
离婚起诉书范本
2015/05/18 职场文书
增值税发票丢失证明
2015/06/19 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python