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

2018-09-22 21:40

阅读数 4

<>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四舍五入的正确打开方式!相关推荐

  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. log python_基于Python log 的正确打开方式

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

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

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

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

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

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

    round( )函数简介 菜鸟教程中介绍到,round() 函数作用就是,返回浮点数x的四舍五入值. > round( x [, n] ) 参数x,n均为数值表达式,返回值为x的四舍五入值.n为 ...

最新文章

  1. 应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序
  2. python程序员工作怎样-python程序员怎样在面试过程中展现自己的基本功
  3. 【已解决】scanf语句中%d后面多加一个空格,为什么数据需要多输入一个?
  4. vue定义global.js,挂载在vue原型上面使用
  5. QT 线程池 + TCP 小试(二)实现通信功能
  6. 什么时候用到mysql存储过程_什么时候用到存储过程
  7. 六、3D-3D ICP问题线性SVD解法与非线性BA解法
  8. 物联网 云计算 大数据 分布式
  9. jquery获得当前元素父级元素_jquery怎么获取当前元素的父元素
  10. 使用SQL生成SQL语句时单引号的转义处理之q'{}'方法
  11. 一个“新生代”白帽的自我修养
  12. 路由与交换技术(复习知识点-全)
  13. 苹果cms小主题模板
  14. 解决“warning #188-D enumerated type mixed with another type”告警
  15. [读书笔记]Spring中的容器设计详解
  16. mysql情况数据库表数据函数_mysql数据库表单查询和函数的使用
  17. 计算机 睡眠 无法打印,台式机睡眠后打不开怎么办
  18. 什么是正态分布?二八法则又是什么?
  19. java斗地主发牌_程序员:Java斗地主部分功能实现:创建牌、发牌并按牌id对其排序...
  20. C++17值类型 (Value Categories)

热门文章

  1. CSS元素高度塌陷的几种常见解决办法!
  2. linux打开dc软件,Linux bc/dc命令的初步使用
  3. Matplotlib的画图的补充(Matplotlib的疑难杂症)
  4. VTK:深度优先搜索动画用法实战
  5. JavaScript实现使用二元运算符将两个数字相加fullAdder算法(附完整源码)
  6. wxWidgets:测试样品
  7. boost::safe_numerics模块实现测试添加 constexpr
  8. Boost.MultiIndex 使用 multi_index_container::ctor_args_list 的示例
  9. boost::mpl模块实现fold相关的测试程序
  10. boost::mp11::mp_replace_at_c相关用法的测试程序