Python 中关于 round 函数的小坑
这个一直都想写,但是因为这个点比较小,所以一直懒得动手。不过还是补上吧,留着早晚是个祸害。
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#Python学习交流QQ群:531509025
$ 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)
0
好玩吗?
如果我们阅读一下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,还有一些比较另类的库)。
>>> 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()的外衣)。
- 当然,对浮点数精度要求如果很高的话,请用嘚瑟馍,不对不对,请用decimal模块。
结尾给大家推荐一个非常好的学习教程,希望对你学习Python有帮助!
Python基础入门教程推荐:更多Python视频教程-关注B站:Python学习者
https://www.bilibili.com/video/BV1LL4y1h7ny?share_source=copy_web
Python爬虫案例教程推荐:更多Python视频教程-关注B站:Python学习者
https://www.bilibili.com/video/BV1QZ4y1N7YA?share_source=copy_web
Python 中关于 round 函数的小坑相关推荐
- python中round函数参数_python中关于round函数的小坑
round函数很简单,对浮点数进行近似取值,保留几位小数.比如 >>> round(10.0/3, 2) 3.33 >>> round(20/7) 3 第一个参数是 ...
- round函数python逗号后不要了吗_Python 中关于 round 函数的小坑
com.service.impl package com.service.impl; import java.util.ArrayList; import java.util.LinkedHashMa ...
- 详解python中的round()函数
round() round()是python自带的一个函数,用于数字的四舍五入. 使用方法(环境python3) round(number,digits) 参数: digits>0,四舍五入到指 ...
- Python中的常用函数
1.range()是一个函数 for i in range () 就是给i赋值: 比如 for i in range (1,3): 就是把1,2依次赋值给i range () 函数的使用是这样的: r ...
- round函数怎么使用python_python中使用round函数的方法
python中使用round函数的方法 发布时间:2020-08-06 11:50:31
- python中的pop函数使用技巧
python 中的pop函数使用小技巧 1.pop()函数是主要作用在列表(list)中,移除列表中的元素,且通过下标值来实现功能,默认情况下移除列表的最后一个元素,每次只能移除一个.如果要移除列表第 ...
- [小笔记]TypeScript/JavaScript模拟Python中的Range函数
[小笔记]TypeScript/JavaScript 模拟Python中的Range函数 李俊才/CSDN博客 CSDN用户名:jcLee95 邮箱:291148484@163.com 原创不易,感谢 ...
- python中list作为函数参数_在python中list作函数形参,防止被实参修改的实现方法
0.摘要 我们将一个list传入函数后,函数内部对实参修改后,形参也会随之改变.本文将主要介绍这种错误的现象.原因和解决方法. 1.代码示例 def fun(inner_lst): inner_lst ...
- python input与返回值-python中使用input()函数获取用户输入值方式
我们编写程序最终目的还是来解决实际问题,所以必然会遇到输入输出的交互问题,python中提供了input函数用来获取用户的输入,我们可以用以下程序演示. user_gender = input(&qu ...
最新文章
- 被解放的姜戈02 庄园疑云
- # 睡眠3秒_小儿睡眠呼吸暂停综合征
- java打星星_java实现星星图形的输出
- 安卓linux输入代码在哪里,输入 | Android 开源项目 | Android Open Source Project
- [Python] L1-013. 计算阶乘和-PAT团体程序设计天梯赛GPLT
- 物体运动到一个点停止_教科版五年级上册第四单元运动和力复习要点
- 解决办法:无法安装 /lib/x86_64-linux-gnu/libpng12.so.0 的新版本
- Julia对矩阵进行预先赋值
- myeclipse安装maven
- 《数学建模与数学实验》第5版 统计分析 习题9.7
- 计算机科学与ICT技术书籍、资料推荐
- vs支持java吗_为什么vs不支持java
- 微信小程序(组件:路由、表单、媒体、自定义组件,插槽、组件通讯、侦听器、生命周期)
- php去除头尾空格,php去除头尾空格的2种方法,php头尾空格2种_PHP教程
- python批量删除文件前缀名_Python3-去除目录中相同的文件名前缀
- nodejs实现ocr
- 让你的APP轻松加上扫描二维码功能
- 【互联网及其应用】第5章网络应用制作技术
- WWDC案例解读:大众点评相机直接扫描支付是怎么实现的
- 常用笔记软件对于视频网站嵌入播放支持