美文网首页
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