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的实际值其实是
  1. >>> '%.32f' % 2.585
  2. '2.58499999999999996447286321199499'
复制代码
所以会被舍去。

如果确实对这个精度要求很高,用 decimal
  1. a = decimal.Decimal('2.585')
  2. b = a.quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_HALF_UP)
  3. print b
复制代码

作者: hymyg    时间: 2016-10-25 08:32
crossin先生 发表于 2016-10-20 14:01
这是有python的浮点精度造成的。
2.585的实际值其实是所以会被舍去。

后来确实使用了decimal模块,但是没有老师的简洁!
  1. def myround(num,dpnum=0):
  2.     '''
  3.     自定义的四舍五入函数,符合常识中理解的四舍五入概念,区别于round()。
  4.     num为需要四舍五入的数字,只能为int或float型数值。
  5.     dpnum为需要保留的位数,只能是大于等于0的int型数值
  6.     '''
  7.     import decimal
  8.     decimal.getcontext().rounding='ROUND_HALF_UP'
  9.     formatword='{:.'+str(dpnum)+'f}'
  10.     return float(formatword.format(decimal.Decimal(str(num))))
复制代码





欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5