python 如何四舍五入
round()函数—奇进偶舍
奇进偶舍,又称为四舍六入五成双规则、银行进位法。
它是一种计数保留法。从统计学的角度,“奇进偶舍”比“四舍五入”更为精确:在大量运算时,因为舍入后的结果有的变大,有的变小,更使舍入后的结果误差均值趋于零。而不是像四舍五入那样逢五就进位,导致结果偏向大数,使得误差产生积累进而产生系统误差。
“奇进偶舍”使测量结果受到舍入误差的影响降到最低。
但是 这样就会间接的影响到我们试图实现四舍五入的操作。
奇进偶舍的具体规则
要求保留位数的后一位如果是4,则舍去。例如5.214保留两位小数为5.21。
如果保留位数的后一位如果是6,则进上去。例如5.216保留两位小数为5.22。
上面这两点是和四舍五入相同的,差别出现在下面,当需要保留的位数的后一位,为5的时候。
如果保留位数的后一位如果是5,而且5后面不再有数,要根据应看尾数“5”的前一位决定是舍去还是进入: 如果是奇数则进入,如果是偶数则舍去。例如5.215保留两位小数为5.22; 5.225保留两位小数为5.22。
a=round(5.215,2) b=round(5.225,2) print('a={0} b={1}'.format(a,b))
得到
a=5.21 b=5.22
如果保留位数的后一位如果是5,而且5后面仍有数。例如5.2254保留两位小数为5.23,也就是说如果5后面还有数据,则无论奇偶都要进入。
a=round(5.2254,2) b=round(5.2153,2) print('a={0} b={1}'.format(a,b))
得到
a=5.23 b=5.22
也就是说,用round(a,b)不能保证将浮点数a四舍五入保留b位小数
那,decimal()呢?貌似老师提过一句保留几位小数的时候用decimal。
from decimal import *
a1=Decimal(5.215).quantize(Decimal('0.00'))
a2=Decimal(5.225).quantize(Decimal('0.00'))
a3=Decimal(5.245).quantize(Decimal('0.00'))
a4=Decimal(5.265).quantize(Decimal('0.00'))
a5=Decimal(5.285).quantize(Decimal('0.00'))
print(a1,a2,a3,a4,a5)
结果也是令人失望…甚至没找到规律
5.21 5.22 5.25 5.26 5.29
但是当第一个数据传入字符串时
from decimal import *a1 = Decimal('5.215').quantize(Decimal('0.00'))
a2 = Decimal('5.225').quantize(Decimal('0.00'))
a3 = Decimal('5.245').quantize(Decimal('0.00'))
a4 = Decimal('5.275').quantize(Decimal('0.00'))
a5 = Decimal('5.285').quantize(Decimal('0.00'))
print(a1, a2, a3, a4, a5)
得到
5.22 5.22 5.24 5.28 5.28
是奇进偶舍了…不过,这又是为什么呢。
我们从python官方文档去寻找线索
https://docs.python.org/zh-cn/3/library/decimal.html#decimal.Decimal.quantize
也就是说,在我们往decimal中存入浮点数时,若是这个浮点数数值无法被计算机精确的存储,那么它就会先被转存为一个二进制的值,再转化为等效(53位甚至更多位来保证精度)的十进制值。因此
试图存入1.1时,其实是存入了1.100000000000000088817841970012523233890533447265625
试图存入1.125时,其实是存入了’1.1249999…’
所以才会 ↓↓↓↓↓
官方文档给出解决办法
当你传入‘1.125’作为decimal的参数时,存入的就是1.125 而不是二进制转化成的十进制“精确数字”
这样 ,DECIMAL做到了奇进偶舍,而不是刚刚上文那样无规律的取舍
最后,也是本文的关键所在, rounding=ROUND_HALF_UP 可以理解为到半向上取整。
结合字符串参数Decimal()
最终四舍五入格式:
a1 = Decimal('1.125').quantize(Decimal('0.00'),rounding=ROUND_HALF_UP)
如果整篇过于啰嗦不愿意看,,就记住上面这个格式,以及下面两点 就好。
①别忘了 引入decimal模块
②Decimal后面这个参数用字符串形式
python 如何四舍五入相关推荐
- python解决四舍五入问题
python解决四舍五入问题 参考文章: (1)python解决四舍五入问题 (2)https://www.cnblogs.com/kevenwork/p/10278029.html 备忘一下.
- 如何在Python中四舍五入数字
It's the era of big data, and every day more and more business are trying to leverage their data to ...
- [转载] Python round四舍五入精度缺失的解决
参考链接: Python round() 问题 一般的四舍五入操作都是使用内置的round方法,但有时候会出现问题.比如 In [1]: round(2.675,2) Out[2]: 2.67 为什么 ...
- Python中四舍五入的讲解
round()函数 (注意:下面的我也不清楚是否正确,我只是发表一下我的观点) 对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可 强烈建议不要去深究,就直接得结果就 ...
- python 实现四舍五入,向上取整、向下取整
百度一下python 四舍五入, 大部分是用round,实际上,因为计算机存储的是二进制,使用round做十进制的四舍五入,会有一定的影响.以下对几种方式进行说明. 一.round实现的四舍五入 pr ...
- python decimal四舍五入_python精确地进行浮点数的四舍五入
做python实验时碰到这么一道题: 输入三个浮点数,求它们的平均值并保留 1 位小数,对小数后第二位数进行四舍五入,最后输出结果 错误示范 因为涉及到四舍五入,随便搜了一下,发现了好多博客都用rou ...
- python实现四舍五入
链接:https://ac.nowcoder.com/acm/problem/20760 来源:牛客网 题目描述 依次输入一个学生的学号,以及3科(C语言,数学,英语)成绩,在屏幕上输出该学生的学号, ...
- python结果四舍五入保留两位小数_Python-根据四舍五入精确保留小数位数的方法...
目前,Python版本中关于保留指定小数位数的常用方法有以下几种: 1. 使用round()内置函数 print(round(1.234, 2)) 输入结果为:1.23 round()函数中的第一个变 ...
- python round()四舍五入有偏差 注意了解
round(0.6) =1 round(0.5) =0 https://www.runoob.com/python/func-number-round.html
最新文章
- Qt+MinGW+OpenCV开发环境在win7系统下的搭建(最新20140423)
- basler相机 ip linux,Linux环境中连接Basler相机(Pylon软件的安装),ROS环境中连接Basler相机...
- 转:Oracle 中union的用法
- BulkLoader类使用
- c语言编写两个矩阵的乘积,如何用c语言编写两个模糊矩阵相乘的程序?
- 收藏 | 在yolov5上验证一些不成熟的想法
- 顺风车订单已结束仍在录音 嘀嗒出行回应录音机制
- 哈尔滨工程大学ACM预热赛(A,C,H,I)
- 《Linux就该这么学》正式版电子书发布!
- innerHTML, innerText, outerHTML, outerText的区别
- 如何禁用或重新启用计算机的休眠功能
- 语音识别:声学的要素和特征
- Java 求解买卖股票的xx时机含手续费
- 2370 小机房的树
- H5头像完整制作,可拖拽缩放,可添加装饰图标(装饰图标支持缩放、旋转、拖拽)
- tinyalsa工具命令
- python快速入门【五】---- 面向对象编程、python类
- AS5047开发简介
- ECharts之3D立体柱状图一
- 用友U8服务器修改数据库端口,用友U8服务器修改数据库端口
热门文章
- 计算机桌面字小怎么调大,电脑字体太小怎么调,小编教你怎样更改电脑界面的字体大小...
- 线上问题排查常用命令
- python逗号怎么打_在Python中输出逗号分隔的方法有哪些
- linux tty 软件包,linux学习之安装ttylinux(世界最小的linux操作系统)(转载)
- 史上最详细宝塔面板安装教程(收藏)
- nvidia jetson nano 风扇控制
- 2023年全国最新保安员精选真题及答案7
- JavaEE Spring(组装打印机)
- 用Python做股票量化分析[附量化交易学习资料]
- [少女时代][分享]171031 SONE NOTE LIVE vol.12公开 允儿挑战艺术字体书写