python 如何四舍五入 |
您所在的位置:网站首页 › python中如何取个位数 › 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…’ 所以才会 ↓↓↓↓↓
这样 ,DECIMAL做到了奇进偶舍,而不是刚刚上文那样无规律的取舍 最后,也是本文的关键所在, rounding=ROUND_HALF_UP 可以理解为到半向上取整。 结合字符串参数Decimal() 最终四舍五入格式: a1 = Decimal('1.125').quantize(Decimal('0.00'),rounding=ROUND_HALF_UP)如果整篇过于啰嗦不愿意看,,就记住上面这个格式,以及下面两点 就好。 ①别忘了 引入decimal模块 ②Decimal后面这个参数用字符串形式 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |