round函数错误及原因
由于round函数使用过程中出现了四舍五入数据不正确的问题,例如:
print(round(1.255,2))
#结果是1.25
print(round(1.265,2))
#1.26
print(round(1.275,2))
#1.27
写了一些实例发现:
当你要保留的那位数字大于等于5时,并且之后的那位数是5时,此时后面的那个5会变成4999999…
举个例子:
print(decimal.Decimal(1.265))
#结果是1.2649999999999999023003738329862244427204132080078125
print(decimal.Decimal(1.275))
#结果是1.274999999999999911182158029987476766109466552734375
解决方案:
一般来说就在数据后面加上0.000000001这样足够小且不影响结果的数就好
但对于数据量大且不确定保留到哪一位的数来说就难保证不出问题了
所以我在这里把数据保留位数之后的那一位加1
问题解决了
#定义新函数
def wghround(num,w):
k = 1/(10**(w+1))
return round(num+k,w)
print(wghround(1.765,2))
#结果为1.77