• python 四舍五入进位不准


    python中四舍五入进位不准,自己写了个方法结果:
    def new_round(_float, _len):
        '''
        四舍五入保留小数位,如果想实现 0.2 显示为 0.20,可使用 '%.2f' % num 实现
        :param _float:
        :param _len: 保留的小数位
        :return:
        '''
        _float=float(_float)
        if len(str(_float).split('.')[1])<= _len:
            return round(_float, _len)
        elif str(_float)[-1] == '5':
            return round(float(str(_float)[:-1] + '6'), _len)
        else:
            return round(_float, _len)
    print('-0.1535' , '=', new_round(-0.15355, 2))
    print('-0.2500', '=', new_round(-0.2500, 2))
    print('0.453', '=', new_round(0.453, 2))
    print('0.5500', '=', new_round(0.5500, 2))
    # 如果想实现 0.2 显示为 0.20,可使用 '%.2f' % num 实现
    print('291.818500', '=', '%.5f' % new_round(291.818500, 5))

    输出:  

    -0.1535 = -0.15
    -0.2500 = -0.25
    0.453 = 0.45
    0.5500 = 0.55
    291.818500 = 291.81850

    # 处理科学计算法记录的数据 如:1.23333e-5
    import math
    n = 10
    demical_num = 7 #需要保留的小数位数
    data_value = 0.0001/3 #需要保留的小数
    print(data_value) # 输出3.3333333333333335e-05
    decimal_digit = '%.'+str(demical_num)+'f'
    for i in range(demical_num+1):
    n = n*10
    if float(data_value) < 0:
    data_value1 = math.ceil(float(data_value) * n)
    else:
    data_value1 = math.floor(float(data_value) * n)
    data_value2 = data_value1/n
    decimal_data = decimal_digit % new_round(float(data_value2), demical_num)
    print(decimal_data) # 输出 0.0000033
    def getDecimal(data_value, demical_num=2, divided_num=100000000, isdivided=True, none_zero='0.00'):
        '''
        除以10000000,并处理小数点
        data_value:需要进行判断是否是-0.00的数据
        :param data_value: 需要处理的小数
        :param demical_num: 保留的小数位
        :param divided_num: 被除数
        :param isdivided: 是否除以 divided_num
        :param none_zero: 非数字返回的值
        :return:
        '''
        def isNumber(num):
            '''
            判断是否为数字
            :param num:
            :return:
            '''
            pattern = re.compile(r'^[-+]?[-0-9]d*.d*|[-+]?.?[0-9]d*$')
            result = pattern.match(str(num))
            if result:
                return True
            else:
                return False
    
        def dealNum(data_value, demical_num, isdivided, divided_num):
            '''
            除以数据,处理科学计算法记录的数据 如:1.2e-5
            :param demical_num: 需要处理的小数
            :param demical_num: 保留的小数位
            :param isdivided: 是否除以 divided_num
            :param divided_num: 被除数
            :return:
            '''
            import math
            n = 10
            for i in range(demical_num + 1):
                n = n * 10
            if float(data_value) < 0:
                if isdivided:
                    data_temp = math.ceil(float(data_value) / divided_num * n)
                else:
                    data_temp = math.ceil(float(data_value) * n)
            else:
                if isdivided:
                    data_temp = math.floor(float(data_value) / divided_num * n)
                else:
                    data_temp = math.floor(float(data_value) * n)
            data_value = data_temp / n
    
        def newRound(_float, _len):
            '''
            四舍五入保留小数位,如果想实现 0.2 显示为 0.20,可使用 '%.2f' % num 实现
            :param _float:
            :param _len: 保留的小数位
            '''
            if len(str(_float).split('.')[1]) <= _len:
                return round(_float, _len)
            elif str(_float)[-1] == '5':
                return round(float(str(_float)[:-1] + '6'), _len)
            else:
                return round(_float, _len)
    
        if not isNumber(str(data_value)):
            return str(none_zero)
    
        decimal_digit = '%.' + str(demical_num) + 'f'
        data_value = dealNum(data_value, demical_num, isdivided, divided_num)
        # 调用new_round()进行四舍五入
        decimal_data = decimal_digit % newRound(float(data_value), demical_num)
        data = str(none_zero) if decimal_data == '-0.00' or decimal_data == '0.00' else decimal_data
        return data

     

     

  • 相关阅读:
    【LeetCode】Set Matrix Zeroes 解题报告
    CodeForces 14 E
    Linux守护进程的编程实现
    用fildder 查看loveuv 刷流量时通信的数据
    .NET MVC学习笔记(一)
    微价值:专訪《甜心爱消除》个人开发人员Lee,日入千元!
    JSP动作--JSP有三种凝视方式
    【Hibernate步步为营】--映射合集汇总
    阿里好的开源项目有哪些(善用工具)
    色彩搭配原理与技巧?
  • 原文地址:https://www.cnblogs.com/snailgirl/p/11634990.html
Copyright © 2020-2023  润新知