>>> a = 0.3135
>>> print("%.3f" % a)
0.314
>>> a = 0.3125
>>> print("%.3f" % a)
0.312
>>>
我期待0.313而不是0.312 任何想过为什么会这样,有没有其他方法可以用来获得0.313?
由于
答案 0 :(得分:5)
根据IEEE 754标准使用round-to-even方法进行Python 3轮播放。
如果你想以不同的方式进行舍入,那么只需手动实现:
import math
def my_round(n, ndigits):
part = n * 10 ** ndigits
delta = part - int(part)
# always round "away from 0"
if delta >= 0.5 or -0.5 < delta <= 0:
part = math.ceil(part)
else:
part = math.floor(part)
return part / (10 ** ndigits)
使用示例:
In [12]: my_round(0.3125, 3)
Out[12]: 0.313
注意:在python2中舍入总是远离零,而在python3中它舍入到偶数。 (例如,参见2.7和3.3之间round
函数的文档差异。)
答案 1 :(得分:0)
试
print '%.3f' % round(.3125,3)
答案 2 :(得分:0)
我有同样的错误四舍五入
round(0.573175, 5)
= 0.57317
我的解决方案
def to_round(val, precision=5):
prec = 10 ** precision
return str(round(val * prec) / prec)
to_round(0.573175)
='0.57318'
答案 3 :(得分:0)
如果您需要准确性don't use float,请使用Decimal
>>> from decimal import *
>>> d = Decimal(0.3125)
>>> getcontext().rounding = ROUND_UP
>>> round(d, 3)
Decimal('0.313')
甚至Fraction