由于使用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)
原文地址:https://www.cnblogs.com/Super-Treasure/p/12108988.html
时间: 2024-11-09 05:15:47