看了一圈高赞回答,居然没人提这个。
大家都知道,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说”:知乎、哔哩哔哩、小红书、新浪微博。