美文网首页
Python小数点精度控制

Python小数点精度控制

作者: 白鬓少年 | 来源:发表于2020-06-09 09:24 被阅读0次

    问题描述:Python中在小数精度控制是最常用便捷的是round,但round并不是简单的四舍五入,而是ROUND_HALF_EVEN的策略,导致偏离预期。

    参考: 谈谈关于Python里面小数点精度控制的问题

    如果想要四舍五入,笔者目前发现有以下两种方式:

    1. 使用decimal模块,策略更改为“ROUND_HALF_UP"(未亲自验证)

    参考: python精确地进行浮点数的四舍五入

    import decimal
    
    # 修改舍入方式为四舍五入
    decimal.getcontext().rounding = "ROUND_HALF_UP"
    
    # 使用字符串来储存小数不会有精度误差,Decimal可以正确处理这种方法表示的数字
    decimal.Decimal("0.645").quantize(decimal.Decimal("0.00"))
    

    2. 自己重写函数:

    def round_up(number, ndigits=None):
        '''
        四舍五入按位精确小数
        
        Args:
            number (float): 小数
            ndigits (int > 0): 精确位数
        '''
        # 判断ndigits是否未正整数
        if isinstance(ndigits, int) or ndigits > 0:
            nd = 10 ** ndigits
            f = (number * nd * 10) % 10
            n = (number * nd * 10) // 10    
    
            if f < 5:
                return round(n / nd, ndigits)
            else:
                return round((n + 1) / nd, ndigits)
        else:
            print('参数错误')
            return 
    

    相关文章

      网友评论

          本文标题:Python小数点精度控制

          本文链接:https://www.haomeiwen.com/subject/xcnjtktx.html