python里保留小数时5舍去的原因是什么-创新互联
创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
你所需要的网站建设服务,我们均能行业靠前的水平为你提供.标准是产品质量的保证,主要从事成都网站制作、成都网站建设、企业网站建设、手机网站开发、网页设计、品牌网站建设、网页制作、做网站、建网站。创新互联拥有实力坚强的技术研发团队及素养的视觉设计专才。这篇文章将为大家详细讲解有关python里保留小数时5舍去的原因是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
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 本身没有问题,而是二进制保存的值有点误差导致的.
关于python里保留小数时5舍去的原因是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
文章名称:python里保留小数时5舍去的原因是什么-创新互联
文章来源:http://hbruida.cn/article/ipcjd.html