【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官方网为你收集整理的的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: 【vscode】python工作目录添加