这个一直都想写,但是因为这个点比较小,所以一直懒得动手。不过还是补上吧,留着早晚是个祸害。

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 函数的小坑相关推荐

  1. python中round函数参数_python中关于round函数的小坑

    round函数很简单,对浮点数进行近似取值,保留几位小数.比如 >>> round(10.0/3, 2) 3.33 >>> round(20/7) 3 第一个参数是 ...

  2. round函数python逗号后不要了吗_Python 中关于 round 函数的小坑

    com.service.impl package com.service.impl; import java.util.ArrayList; import java.util.LinkedHashMa ...

  3. 详解python中的round()函数

    round() round()是python自带的一个函数,用于数字的四舍五入. 使用方法(环境python3) round(number,digits) 参数: digits>0,四舍五入到指 ...

  4. Python中的常用函数

    1.range()是一个函数 for i in range () 就是给i赋值: 比如 for i in range (1,3): 就是把1,2依次赋值给i range () 函数的使用是这样的: r ...

  5. round函数怎么使用python_python中使用round函数的方法

    python中使用round函数的方法 发布时间:2020-08-06 11:50:31

  6. python中的pop函数使用技巧

    python 中的pop函数使用小技巧 1.pop()函数是主要作用在列表(list)中,移除列表中的元素,且通过下标值来实现功能,默认情况下移除列表的最后一个元素,每次只能移除一个.如果要移除列表第 ...

  7. [小笔记]TypeScript/JavaScript模拟Python中的Range函数

    [小笔记]TypeScript/JavaScript 模拟Python中的Range函数 李俊才/CSDN博客 CSDN用户名:jcLee95 邮箱:291148484@163.com 原创不易,感谢 ...

  8. python中list作为函数参数_在python中list作函数形参,防止被实参修改的实现方法

    0.摘要 我们将一个list传入函数后,函数内部对实参修改后,形参也会随之改变.本文将主要介绍这种错误的现象.原因和解决方法. 1.代码示例 def fun(inner_lst): inner_lst ...

  9. python input与返回值-python中使用input()函数获取用户输入值方式

    我们编写程序最终目的还是来解决实际问题,所以必然会遇到输入输出的交互问题,python中提供了input函数用来获取用户的输入,我们可以用以下程序演示. user_gender = input(&qu ...

最新文章

  1. 被解放的姜戈02 庄园疑云
  2. # 睡眠3秒_小儿睡眠呼吸暂停综合征
  3. java打星星_java实现星星图形的输出
  4. 安卓linux输入代码在哪里,输入  |  Android 开源项目  |  Android Open Source Project
  5. [Python] L1-013. 计算阶乘和-PAT团体程序设计天梯赛GPLT
  6. 物体运动到一个点停止_教科版五年级上册第四单元运动和力复习要点
  7. 解决办法:无法安装 /lib/x86_64-linux-gnu/libpng12.so.0 的新版本
  8. Julia对矩阵进行预先赋值
  9. myeclipse安装maven
  10. 《数学建模与数学实验》第5版 统计分析 习题9.7
  11. 计算机科学与ICT技术书籍、资料推荐
  12. vs支持java吗_为什么vs不支持java
  13. 微信小程序(组件:路由、表单、媒体、自定义组件,插槽、组件通讯、侦听器、生命周期)
  14. php去除头尾空格,php去除头尾空格的2种方法,php头尾空格2种_PHP教程
  15. python批量删除文件前缀名_Python3-去除目录中相同的文件名前缀
  16. nodejs实现ocr
  17. 让你的APP轻松加上扫描二维码功能
  18. 【互联网及其应用】第5章网络应用制作技术
  19. WWDC案例解读:大众点评相机直接扫描支付是怎么实现的
  20. 常用笔记软件对于视频网站嵌入播放支持

热门文章

  1. 【漫画解读银行业务】
  2. 我们来谈谈面向指针编程的那些事
  3. ASP.NET Core 介绍和项目解读
  4. 51nod 1766
  5. ECshop网点程序优化-后台添加类目自动选择上次父类目并计算Sort Order
  6. ACM论文格式上常见的一些错误
  7. WIN7 WIN8 笔记本无线网卡MAC地址修改
  8. 基于corosync和NFS服务器实现LNMP的高可用
  9. 乌龟的故事,很精彩滴哟
  10. 【学习笔记】出货认证(QM模块)