python中round函数如何使用


Posted in Python onJune 19, 2020

round函数很简单,对浮点数进行近似取值,保留几位小数。比如

>>> round(10.0/3, 2)
3.33
>>> round(20/7)
3

第一个参数是一个浮点数,第二个参数是保留的小数位数,可选,如果不写的话默认保留到整数。

这么简单的函数,能有什么坑呢?

1、round的结果跟python版本有关

我们来看看python2和python3中有什么不同:

$ python
Python 2.7.8 (default, Jun 18 2015, 18:54:19) 
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> round(0.5)
1.0
$ python3
Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> round(0.5)

如果我们阅读一下python的文档,里面是这么写的:

在python2.7的doc中,round()的最后写着,“Values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done away from 0.” 保留值将保留到离上一位更近的一端(四舍六入),如果距离两端一样远,则保留到离0远的一边。所以round(0.5)会近似到1,而round(-0.5)会近似到-1。

但是到了python3.5的doc中,文档变成了“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.” 如果距离两边一样远,会保留到偶数的一边。比如round(0.5)和round(-0.5)都会保留到0,而round(1.5)会保留到2。

所以如果有项目是从py2迁移到py3的,可要注意一下round的地方(当然,还要注意/和//,还有print,还有一些比较另类的库)。

2、特殊数字round出来的结果可能未必是想要的。

>>> round(2.675, 2)
2.67

python2和python3的doc中都举了个相同的栗子,原文是这么说的:

Note

The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected

2.68. This is not a bug: it's a result of the fact that most decimal fractions can't be represented exactly as a

float. See Floating Point Arithmetic: Issues and Limitations for more information.

简单的说就是,round(2.675, 2) 的结果,不论我们从python2还是3来看,结果都应该是2.68的,结果它偏偏是2.67,为什么?这跟浮点数的精度有关。我们知道在机器中浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位数的,机器已经做出了截断处理。那么在机器中保存的2.675这个数字就比实际数字要小那么一点点。这一点点就导致了它离2.67要更近一点点,所以保留两位小数时就近似到了2.67。

以上。除非对精确度没什么要求,否则尽量避开用round()函数。近似计算我们还有其他的选择:

使用math模块中的一些函数,比如math.ceiling(天花板除法)。

python自带整除,python2中是/,3中是//,还有div函数。

字符串格式化可以做截断使用,例如 "%.2f" % value(保留两位小数并变成字符串……如果还想用浮点数请披上float()的外衣)。

当然,对浮点数精度要求如果很高的话,请用?N瑟馍,不对不对,请用decimal模块。

内容扩展:

round(number,num_digits)

Number 需要进行四舍五入的数字。

Num_digits 指定的位数,按此位数进行四舍五入。

注解

  • 如果 num_digits 大于 0,则四舍五入到指定的小数位。
  • 如果 num_digits 等于 0,则四舍五入到最接近的整数。
  • 如果 num_digits 小于 0,则在小数点左侧进行四舍五入。

示例

x=1.343671234
print x
print round(x,1)
print round(x,2)
print round(x,3)

输出结果为:

1.343671234
1.3
1.34
1.344

到此这篇关于python中round函数如何使用的文章就介绍到这了,更多相关python的round函数用法总结内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python正则表达式re模块详细介绍
May 29 Python
Python中的迭代器与生成器高级用法解析
Jun 28 Python
Python如何判断数独是否合法
Sep 08 Python
Python 编码Basic Auth使用方法简单实例
May 25 Python
pandas数据分组和聚合操作方法
Apr 11 Python
快速解决PyCharm无法引用matplotlib的问题
May 24 Python
python 请求服务器的实现代码(http请求和https请求)
May 25 Python
Sanic框架配置操作分析
Jul 17 Python
matplotlib.pyplot绘图显示控制方法
Jan 15 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
Nov 15 Python
在python中创建指定大小的多维数组方式
Nov 28 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 Python
keras实现theano和tensorflow训练的模型相互转换
Jun 19 #Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 #Python
python中怎么表示空值
Jun 19 #Python
Python调用OpenCV实现图像平滑代码实例
Jun 19 #Python
使用OpenCV对车道进行实时检测的实现示例代码
Jun 19 #Python
为什么python比较流行
Jun 19 #Python
查看keras的默认backend实现方式
Jun 19 #Python
You might like
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
Javascript 中的类和闭包
2010/01/08 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
2018/12/11 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
python单线程实现多个定时器示例
2014/03/30 Python
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
python并发编程之线程实例解析
2017/12/27 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
Django csrf 验证问题的实现
2018/10/09 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
2019/08/30 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
CSS3的column-fill属性对齐列内容高度的用法详解
2016/07/01 HTML / CSS
Giuseppe Zanotti美国官方网站:将鞋履视为高级时装般精心制作
2018/02/06 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
个人应聘自我评价分享
2013/11/18 职场文书
安全生产工作汇报
2014/10/28 职场文书
信用卡催款律师函
2015/05/27 职场文书
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL
移除Selenium中window.navigator.webdriver值
2022/06/10 Python