Python中小数四舍五入的处理

Yasin 2019-12-27

由于使用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)

相关推荐

展翅飞翔phpBoy00 / 0评论 2013-10-28