python 结果四舍五入保留一位小数,python3四舍五入保留两位小数
先看代码:
Print(float,1个小数位保留round(22.95),float(% . 1f % float(22.95)))print( float,1个小数位保留22.85),float(% . 1f % float(22.85)))print( round)1)# float,22.95保留一个小数位22.9# float,22.85保留一个小数位22.9# round保留一个小数位:22.9惊奇发现22.95结果在22.9其实和22.85的舍入结果一样。
round( )函数简介
菜鸟教程里介绍过,round()函数用于返回浮点数x的取整值.是返回值x的取整值. N是保留的小数位数;如果不加n,则只保留x的四舍五入整数部分。
特殊的情况,不是四舍五入
结果明显不符合四舍五入规则。为什么会这样?原因是:round()函数只有一个参数。当未指定位数时,它返回一个整数,这是最接近的整数,类似于舍入。当指定了要选择的小数位数时,通常使用舍入规则。但在. 5的情况下,如果待选位数前的小数是奇数,则直接丢弃;如果是偶数,则向上选择。
小数位的四舍五入在项目中经常用到,这就是上面提出22.95变成了22.9,那如何才能变成23.0呢?
查找原因
通过小数函数找到原因。
Print(十进制数(22.95)) print(十进制数(22.85))# 18686 . 486868868616
这就是为什么有的5能进,有的不能。如上面的代码所示,22.85可以正常进位。
round本身没有问题,只是二进制存储值有点错误。
正确的解决方法
from decimal import Decimal,ROUND_HALF_UPdef numTrans(n,d=2): s=0 0 * d返回十进制数(str(n))。quantize(Decimal(s),Round=Round _ half _ up)print( num trans 22.95保留1位:,numtrans (22.95,1)) # numtrans 22.95保留1位:23.0
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。