小白学python(通俗易懂)——关于小数的格式化输出问题(小心round有坑,谨慎使用)

文章讨论了Python2和3中`print`函数、`format`方法以及`round`函数在处理浮点数精度时的不同。在Python3中,`round`函数遵循银行家舍入规则,即在距离相等时倾向于保留偶数。对于`round(2.675,2)`的例子,由于浮点数精度问题,实际存储的值比2.675略小,因此结果为2.67。文章建议在精度要求严格的情况下谨慎使用`round`函数。
摘要由CSDN通过智能技术生成

1.print("%.2f"%num)

2.print(format1.2345,".2f")

3.round函数

(a.)print(round(3.5))#取整

python2:数位没有改变,但丢失精度

pyhton3:

 python3直接取整,精度保持到个位且没有小数位。

 (b.)print(round(1.2345678,2))

在python2保留值将保留到离上一位更近的一端(四舍六入),如果距离两端一样远,则保留到离0远的一边。所以round(0.5)会近似到1,而round(-0.5)会近似到-1。

但是到了python3 如果距离两边一样远,会保留到偶数的一边。比如round(0.5)和round(-0.5)都会保留到0,而round(1.5)会保留到2。

特别地,

round(2.675, 2) 的结果,不论我们从python2还是3来看,结果都应该是2.68的,结果它偏偏是2.67,为什么?这跟浮点数的精度有关。我们知道在机器中浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位数的,机器已经做出了截断处理。那么在机器中保存的2.675这个数字就比实际数字要小那么一点点。这一点点就导致了它离2.67要更近一点点,所以保留两位小数时就近似到了2.67。

综上,round非必须情况下最好不要使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值