一、背景
Python 内置的函数 round() 能够大致实现四舍五入的功能,但会存在部分场景不适用,比如:
round(1.315, 2)
# 返回结果:1.31
round(2.675, 2)
# 返回结果:2.67
round(5.215, 2)
# 返回结果:5.21
round(56.5)
# 返回结果:56
网上搜了一圈,只找到了 Decimal 的替代解决方法,但看了貌似比较复杂,经过思考一番,只有遇到尾数为 5 的情况下,才会计算有偏差,那直接把 5 加 1 变成 6,不就可以轻松解决了吗?说干就干,经过一番测试,实现了真正的四舍五入。
二、Python实现真正的四舍五入
def rounding(num, n=0):
"""
功能:优化Python内置的round()函数有时出现四舍六入的问题,实现真正的四舍五入。
实现原理:当需要四舍五入的小数点后一位是5时,加1变成6,即可顺利利用round()函数,实现真正的四舍五入。
参数:
num: 需要四舍五入的数字;
n: 保留的小数点位数,默认取整。
"""
if '.' in str(num):
if len(str(num).split('.')[1]) > n and str(num).split('.')[1][n] == '5':
num += 1 * 10 ** -(n+1)
if n:
return round(num, n)
else:
return round(num)
测试一下:
print('修正四舍六入:')
print('2.675 保留 2 位小数的四舍五入结果为:', rounding(2.675, 2))
print('5.215 保留 2 位小数的四舍五入结果为:', rounding(5.215, 2))
print('1.315 保留 2 位小数的四舍五入结果为:', rounding(1.315, 2))
print('\n取整结果:')
print('56.50 四舍五入取整的结果为:', rounding(56.50, 0))
print('56.5 四舍五入取整的结果为:', rounding(56.5, 0))
print('56.0 四舍五入取整的结果为:', rounding(56.0, 0))
print('56 四舍五入取整的结果为:', rounding(56, 0))
print('\n未加参数默认取整结果:')
print('56.50 四舍五入取整的结果为:', rounding(56.50))
print('56.5 四舍五入取整的结果为:', rounding(56.5))
print('56.0 四舍五入取整的结果为:', rounding(56.0))
print('56 四舍五入取整的结果为:', rounding(56))
返回结果如下:
修正四舍六入:
2.675 保留 2 位小数的四舍五入结果为: 2.68
5.215 保留 2 位小数的四舍五入结果为: 5.22
1.315 保留 2 位小数的四舍五入结果为: 1.32
取整结果:
56.50 四舍五入取整的结果为: 57
56.5 四舍五入取整的结果为: 57
56.0 四舍五入取整的结果为: 56
56 四舍五入取整的结果为: 56
未加参数默认取整结果:
56.50 四舍五入取整的结果为: 57
56.5 四舍五入取整的结果为: 57
56.0 四舍五入取整的结果为: 56
56 四舍五入取整的结果为: 56
搞定!文章来源:https://www.toymoban.com/news/detail-507739.html
如有其他特殊情况未兼容,欢迎在评论区留言反馈~文章来源地址https://www.toymoban.com/news/detail-507739.html
到了这里,关于Python实现真正的四舍五入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!