Crossin的编程教室
标题:
请教round(2.585,2) 结果不正确
[打印本页]
作者:
hymyg
时间:
2016-10-19 15:19
标题:
请教round(2.585,2) 结果不正确
python2中round(2.585,2)的结果是2.58,有什么办法能得到正确的结果?
作者:
crossin先生
时间:
2016-10-20 14:01
这是有python的浮点精度造成的。
2.585的实际值其实是
>>> '%.32f' % 2.585
'2.58499999999999996447286321199499'
复制代码
所以会被舍去。
如果确实对这个精度要求很高,用 decimal
a = decimal.Decimal('2.585')
b = a.quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_HALF_UP)
print b
复制代码
作者:
hymyg
时间:
2016-10-25 08:32
crossin先生 发表于 2016-10-20 14:01
这是有python的浮点精度造成的。
2.585的实际值其实是所以会被舍去。
后来确实使用了decimal模块,但是没有老师的简洁!
def myround(num,dpnum=0):
'''
自定义的四舍五入函数,符合常识中理解的四舍五入概念,区别于round()。
num为需要四舍五入的数字,只能为int或float型数值。
dpnum为需要保留的位数,只能是大于等于0的int型数值
'''
import decimal
decimal.getcontext().rounding='ROUND_HALF_UP'
formatword='{:.'+str(dpnum)+'f}'
return float(formatword.format(decimal.Decimal(str(num))))
复制代码
欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/)
Powered by Discuz! X2.5