Python 有什么不为人知的坑?关于python里的round函数的四舍五入问题

看了一圈高赞回答,居然没人提这个。

大家都知道,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说”:知乎、哔哩哔哩、小红书、新浪微博。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马哥python说

打赏多少不重要,表达认可最重要

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值