Python中小数四舍五入的处理

由于使用round模块导致小数四舍五入精度不准确,于是自己写了一个四舍五入的方法,方便今后工作中参考!

 
""""""""""""""""""""""""""""
# -*- coding: utf-8 -*-
# @Time : 2019/12/27 18:09
# @Author : Treasure丶
# @Site :
# @File : demo2.py
# @Software: PyCharm Community Edition
"""""""""""""""""""""""""""""


class rounded(object):
def rounded_Four_Five(self, num, digits):
"""
小数点四舍五入的方法
:param num: 指定的四舍五入的小数
:param digits: 指定保留的位数
:return: 四舍五入后的数字
"""
# 首先判断传入的参数类型是否为浮点型
if isinstance(num, float) == False:
return "该数值类型不为浮点型,无法操作!"
else:
value = str(num)
len_num = len(value) # 获取总长度
index_point = value.find('.') # 获取小数点索引
if len_num - (index_point + 1) < digits:
return "保留位数入参大于小数位数,无法操作!"
else:
if num > 0:
if int(value[index_point + digits + 1]) >= 5: # 是否入五
num = float(num) + float(str("0.{}1".format('0' * (digits - 1)))) # 在指定的位数上面+1(这里要考虑数值相加进位的问题)
return float(str(num)[:index_point + digits + 1])
else: # 否则舍四
return float(str(num)[:index_point + digits + 1])
elif num < 0: # 如果是负数
abs_num = str(abs(num)) # 获取绝对值
index_point = abs_num.find('.') # 需要从绝对值中获取小数点索引位置
if int(abs_num[index_point + digits + 1]) >= 5: # 是否入五
abs_num = float(abs_num) + float(
str("0.{}1".format('0' * (digits - 1)))) # 在指定的位数上面+1(这里要考虑数值相加进位的问题)
return float('-' + str(abs_num)[:index_point + digits + 1])
else: # 否则舍四
return float('-' + str(abs_num)[:index_point + digits + 1])


if __name__ == '__main__':
d = rounded().rounded_Four_Five(2323.956879089786, 9)
print(d)

猜你喜欢

转载自www.cnblogs.com/Super-Treasure/p/12108988.html