欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程语言 > >内容正文

python

【python】原创 | 写一个符合人类思维的四舍五入函数(no round !!!) -凯发k8官方网

发布时间:2025/1/21 17 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

前言

众所周知,python中的round采取的是银行家舍入。而不是四舍五入。

# python中采取的规则是 《银行家式舍入法》 # 即 四舍六入五成双 # 详细解释见下 ''' 四舍六入五考虑。 五后非零就进一, 五后皆零看奇偶, 五前为偶应舍去, 五前为奇要进一。 '''

实例讲解

decimal('3.1349999999999997868371792719699442386627197265625') round(3.135,2) # 实际是 round(3.1349999....625,2) # 第3位是4,故被舍去## 我们再来看些实例 >>> decimal(3.165) decimal('3.16500000000000003552713678800500929355621337890625') >>> round(3.165,2) 3.17 >>> decimal(1.115) decimal('1.1149999999999999911182158029987476766109466552734375') >>> round(1.115,2) 1.11

自定义实现

# from decimal import *def getdecimal(num, n):'''这是一个符合人类思维的四舍五入函数,所有没有引入decimal。'''if n < 0:# 抛出异常raise exception('the second param: n, must be bigger than zero!')elif n == 0:return int(num)num = (f"%.{n 1}f") % numpos = num.find('.')sub_pos = pos n 1 # 待判定位置flag = falseif num[sub_pos] >= '5':flag = truereturn num[:sub_pos-1] chr(ord(num[sub_pos-1]) 1) if flag else num[:sub_pos]if __name__ == '__main__':print(getdecimal(3.892, 2))print(getdecimal(3.135, 2))

运行结果:

总结

以上是凯发k8官方网为你收集整理的的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图