在python中保留小数时5舍弃的原因是:round函数在遇到“.5”在这种情况下,如果要选择的位数前的小数是奇数,则直接放弃,如果是偶数则向上选择。
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时,如果要选择的位数前的小数是奇数,则直接放弃,如果是偶数则向上选择。
小数位的四舍五入在项目中经常使用,今天群里有人提出1.325 怎样才能变成1.33?
那时候我看到这么简单,分秒就能解决:
这是我的回复
round(1.315,2)
有个小伙伴 当时回答:
他想要的结果是 1.32, 你打印的是1.31,我觉得怎么可能,我自己操作,
结果真是1.31 .
我想都没想。我认为我是对的。嗯,难怪我不能开发和测试我的代码.
我开始寻找原因,我们通过代码解释:
print(Decimal(1.325))
打印结果:
1.3249999999999999555910790149937383830547332763671875
你看到了吗? 实际1.325用二进制转化为精度损失。有些小数不能完全用二进制表示。这是根本原因.
有些学生应该说,为什么? 有的五能进1 你能解释下一个原则吗?原理和上面一样。让我举个例子 5可以进1
print(round(1.145,2)) #打印结果 1.15
继续检查二进制保存值:
print(Decimal(1.145)) #打印结果 1.145000000000000017763568394002504646778106689453125
大家都明白了 ,round 没有问题,但是二进制保存值有点误差造成的.
推荐课程:学习和练习机器学习(黑马程序员)