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
最新文章
- Android 侧滑栏 (DrawerLayout)
- python中while嵌套循环_python中的while循环
- iis cgi 无法使用_ASP.NET Core前后端分离项目使用gitlabci持续集成到IIS
- 【图文详解】第一个Java程序HelloWorld详解,写Java程序需要注意什么
- Asp.NET Core 中如何加密 Configuration ?
- 2017-2018 20155309 南皓芯 信息安全基础设计第八周博客
- mac安装mysql devel_Mac安装Mysql
- java格式化数字 NumberFormat及DecimalFormat
- 中兴笔试c语言,中兴c语言笔试题
- sipp uas 脚本
- linux u盘启动制作教程,cdlinux u盘启动制作教程
- 如何以最快速度将Vue接入在线客服系统?
- 服务器编程之路:进无止境(上)
- Python CT图像预处理——nii格式读取、重采样、窗宽窗位设置
- Java 图片转换base64
- linux 编译过程中acx_pthread.m4类错误解决办法
- 餐饮如何运用人工智能
- ant-design-vue对起始时间的校验
- spreadsheet php,PhpSpreadsheet的简单使用
- 如何使用Lumberyard制作特效[【1】——Overview