看了一圈高赞回答,居然没人提这个。
大家都知道,round()是用来四舍五入的。
但是,有特殊情况:
发现问题了吗?
-
7.55保留一位小数,按四舍五入,应该得7.6,却得到7.5
-
1.315保留两位小数,按四舍五入,应该的1.32,却得到1.31
因为,Python遵循的不是四舍五入,而是“四舍六入五成双”
Python官方文档:
round介绍:内置函数 — Python 3.10.5 文档
浮点算术的争议和限制:15. 浮点算术:争议和限制 - Python 3.10.5 文档
为此,我专门写了一个函数,修复此问题(如果算作是问题):
def new_round(v_value, ndigits=1): """ 修复python四舍五入问题 :param ndigits: 保留几位小数 :param v_value: 输入数值 :return: 输出数值 """ f = int(v_value) % 10 if f <= 4: v_value = (int(v_value) // 10) / 10 else: v_value = (int(v_value) // 10 + 1) / 10 print(v_value) return v_value
暂且不论它算不算Python的bug,但你一定要知晓这个事。
别让你的程序,由于它,计算出错误结果,自己却浑然不知!
到那个时候,就算不是python的bug,也是你的程序bug了!!
Python 有什么不为人知的坑? - 知乎 | 马哥python说
我是马哥,全网累计粉丝上万,欢迎一起交流python技术。
各平台搜索“马哥python说”:知乎、哔哩哔哩、小红书、新浪微博。



