浅谈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根据出生年份简单计算生肖的方法
Mar 27 Python
python同时给两个收件人发送邮件的方法
Apr 30 Python
Python字符串格式化的方法(两种)
Sep 19 Python
微信跳一跳小游戏python脚本
Jan 05 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
python3安装speech语音模块的方法
Dec 24 Python
Python爬虫抓取技术的一些经验
Jul 12 Python
使用Python实现批量ping操作方法
May 06 Python
浅谈keras使用中val_acc和acc值不同步的思考
Jun 18 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 Python
python遍历路径破解表单的示例
Nov 21 Python
python代码实现扫码关注公众号登录的实战
Nov 01 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&java(二)
2006/10/09 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
2011/04/17 PHP
PHP合并两个数组的两种方式的异同
2012/09/14 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
2011/07/26 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
整理JavaScript创建对象的八种方法
2015/11/03 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
vue中七牛插件使用的实例代码
2017/07/28 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
详解ES7 Decorator 入门解析
2019/02/18 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
python中模块查找的原理与方法详解
2017/08/11 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
树莓派+摄像头实现对移动物体的检测
2019/06/22 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
营销总监岗位职责
2014/09/16 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
创业计划书详解
2019/07/19 职场文书
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang