zoukankan      html  css  js  c++  java
  • 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)

    作者:Treasure丶
    如何本篇文章对你有所帮助,记得右下角“推荐”一下哦,博主再此谢过啦
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    学习windows编程 day4 之视口和窗口
    学习windows编程 day4 之 映射模式
    学习windows编程 day4 之 盯裆猫
    Android自动化测试(UiAutomator)简要介绍
    UltraEdit正则表达式介绍及实例
    addr2line -f -e *.so 0x9d69
    Android执行shell命令
    Drawable、Bitmap、byte[]之间的转换
    Ubuntu 12.04 64bit 配置完android 5.0编译环境后出现“could not write bytes: Broken pipe.”而无法进入输入帐号密码的登陆界面
    CameraTest
  • 原文地址:https://www.cnblogs.com/Super-Treasure/p/12108988.html
Copyright © 2011-2022 走看看