round( )函数简介

菜鸟教程中介绍到,round() 函数作用就是,返回浮点数x的四舍五入值。

> round( x [, n] )

参数x,n均为数值表达式,返回值为x的四舍五入值。n为保留的小数位数,不加n则只保留x四舍五入后的整数部分。

>>> round(2.3)

2

>>> round(2.45, 1)

2.5

特殊情况

上面的结果并没有错误,这里再用2.675测试一下:

>>> round(2.675, 2)

2.67

显然结果不符合四舍五入的规则。为什么会这样呢?原因是:round()函数只有一个参数,不指定位数的时候,返回一个整数,而且是最靠近的整数,类似于四舍五入,当指定取舍的小数点位数的时候,一般情况也是使用四舍五入的规则,但是碰到.5的情况时,如果要取舍的位数前的小数是奇数,则直接舍弃,如果是偶数则向上取舍。

这也就解释了上述现象。可这样一来用round()函数取浮点数的四舍五入值不就变得不可靠了嘛?这样的函数设计的意义何在?网上搜了一圈答案,觉得这个说法比较准确:

python3(注意python2 和 3的round()是不一样的,这里仅以python3作说明)中round()对浮点数的取舍遵循的是“四舍六入五平分”,“五平分”就是根据取舍的位数前的小数奇偶性来判断,奇偶平分,符合公平性原则(四舍五入不是公平的),这样一来也就保证了在数据量较大的情况下,筛选数据的真实性。(数学渣,不知道这样理解对否……)

为什么需要平分呢?原因就是部分小数无法用二进制完整表示,如1.15,转为二进制将是很长的一串数字:1.0010011001100110011001100110011001100110011001100110011 这可不是简单的几个字节就能存放下的。因此这里就出现了取舍的问题。

那么正确的四舍五入是否无法实现了呢?当然是有解决办法的。比如,当你需要四舍五入保留两位小数的时候,可以将数值乘以100再除以100.0:

>>> round(2.675 * 100)/100.0

2.68

这样可以解决部分浮点数四舍五入的问题。为什么是部分呢?笔者发现:

>>> round(2.135*100)/100.0

2.13

检验下过程:

>>> 2.135*100

213.49999999999997

WTF!是精度问题嘛!

>>> Decimal(2.135)*100

Decimal('213.4999999999999786837179272')

无法理解是不是!!二进制的世界正常人真的不懂,盼望一下未来有可以直接计算十进制的硬件诞生吧。

总结

在用round()函数进行四舍五入时,如果你对结果有十足把握,并且这就是你想要的结果,那就放心大胆地使用。不然就老老实实写个函数来实现吧,这不是什么难事。

python四舍五入round_四舍五入就用round( )?Python四舍五入的正确打开方式!-Go语言中文社区...相关推荐

  1. python天天向上的力量三天打鱼两天晒网_017 示例3-天天向上的力量-Go语言中文社区...

    一."天天向上的力量"问题分析 1.1 天天向上的力量 基本问题:持续的价值 一年365天,每天进步1%,累计进步多少呢? (1.01^{365}) 一年365天,每天退步1%,累 ...

  2. python爬取微博评论超100页_python爬取新浪微博评论-Go语言中文社区

    简介 爬取微博m站评论.由于api限制只能爬取前100页,如果想要更全数据需爬pc端. 工具 python 3.5 requests库 re库 步骤 1. 登陆保存cookie 首先,打开m.weib ...

  3. python怎么输出所有奇数_python输出100以内奇数的几种输出方式-Go语言中文社区

    自从看了一些Python的一些基础语言之后,发现Python这门语言还是蛮有趣啊,很多计算用Python效率还是蛮高啊,几行就搞定了.比方说输出100以内的奇数,用其他语言,可能都是先for循环遍历1 ...

  4. python语言英语单词_叮叮叮 重点之中的python必备英语单词(2)来啦!请记得查收-Go语言中文社区...

    1. terminate 终止 2. request 请求 3. response 响应 4. content 内容 5. url 链接.网址 6. picture 图片 7. split 分割 8. ...

  5. python情人节之玫瑰花与表白方式_python情人节之玫瑰花与表白方式-Go语言中文社区...

    import turtle def initialization(): ''' 初始化画布和画笔 ''' turtle.setup(width=0.9, height=0.9) turtle.spee ...

  6. python四舍五入round_四舍五入就用round( )?Python四舍五入的正确打开方式!

    四舍五入就用round( )?Python四舍五入的正确打开方式! 2018-09-22 21:40 阅读数 4 <>round( )函数简介 菜鸟教程中介绍到,round() 函数作用就 ...

  7. log python_基于Python log 的正确打开方式

    保存代码到文件:logger.py import os import logbook from logbook.more import ColorizedStderrHandler import sm ...

  8. 【Python】NumPy 中 ravel() 正确打开方式

    [Python]NumPy 中 ravel() 正确打开方式 最近在看书时,对numpy的ravel()的有些疑惑,书上这样写到"如果结果中的值在原始数组中是连续的,则ravel 不会生成底 ...

  9. Python Matplotlib绘图的正确打开方式

    Python Matplotlib绘图的正确打开方式 文章目录 Python Matplotlib绘图的正确打开方式 1.先搞懂fig.axes.axis `Figure` `Axes` `Axis` ...

最新文章

  1. java标准类的制作
  2. python 修改字符串中的某个单词_python Pandas替换字符串中的单词
  3. 选什么专业,最容易拿下互联网大厂 Offer?三个支付宝新人来支招
  4. [ CodeVS冲杯之路 ] P1044
  5. python基础知识面试题-干货满满--亲身经历的 Python 面试题
  6. 【项目管理】八大绩效域裁剪考虑事项
  7. java如何运行一个任务_如何每天从Java运行任务?
  8. python下载之后无法启动_安装后启动时,适用于Python的Eric IDE崩溃
  9. python wheel使用_【转载】Python,使用Wheel打包
  10. 作者:黄玲玲(1982-),女,博士,安徽省公共交通安全科学研究院副研究员。...
  11. Python calendar日历模块的常用方法
  12. bzoj千题计划259:bzoj3122: [Sdoi2013]随机数生成器
  13. 手机鸿蒙系统体验,首位!魅族Lipro智能家居宣布接入鸿蒙系统,魅族手机还会远吗?...
  14. 如何为resin的jvm-default.log瘦身
  15. 配置LVS + Keepalived高可用负载均衡集群之图文教程
  16. SOME/IP 协议介绍
  17. Unity 性能优化 之 非常酷的SRP Batcher!
  18. dmg是什么文件格式_什么是DMG文件(以及我该如何使用)?
  19. IIS反向代理 URL重写 404或500 错误问题的解决方案
  20. 页面练习my blog day51

热门文章

  1. 【java】java 多线程 异步计算 FutureTask 源码详解
  2. 【Elasticsearch】java 操作 Elasticsearch 7.8 索引 文档 等操作
  3. 【ElasticSearch】Es 源码之 IndicesService 源码解读
  4. 【Java】Base64编码与解码
  5. 华为上机试题 c语言,华为上机考试题库2017 2017年全国计算机等级考试C语言上机考试题库 -1-20套.doc...
  6. mysql主码列允许null_mysql的一些基本操作
  7. python如何将数据保存到本地json文件
  8. Flask模板参数传值的方法
  9. Java多线程学习十二: synchronized的工作原理 以及背后的“monitor 锁”
  10. Linux系统学习: 用户和权限管理指令: 请简述 Linux 权限划分的原则