必威体育Betway必威体育官网
当前位置:首页 > IT技术

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

时间:2019-07-28 16:14:20来源:IT技术作者:seo实验室小编阅读:59次「手机版」
 

四舍五入

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破解无线wifi

既然要破解wifi,那么连接wifi的模块首先要有的,我们要导入pywifi模块。 有些同学可能没有这个,如果直接通过pip安装的话,可能不能用,

python学习——print和pprint两者的区别

  print()和pprint()都是python的打印模块,功能基本一样,唯一的区别就是pprint()模块打印出来的数据结构更加完整,每行为一个数据结

[DA45] 使用python对歌手歌曲做词云展示

一. 词云介绍 词云也叫文字云, 它帮助我们统计文本中高频出现的词, 过滤掉某些常用词后将文本中的重要关键词进行可视化, 方便分

python爬取电影天堂(www.dy2018.com)所有视屏的所有链接

用到的库为requests,bs4,re,pymysql目的是将链接存入数据库,数据库分为三张表:category:存储分类video:存储视屏的信息link:存储链接因

python list的append 函数

x = [1, 2, 3] y = [] y.append(x) x.append(9) y.append(x) print(y)期望结果是 [[1, 2, 3], [1, 2, 3, 9]]实际的输出结果是 [

分享到:

栏目导航

推荐阅读

热门阅读