>>> a = 0.3135
>>> print("%.3f" % a)
0.314
>>> a = 0.3125
>>> print("%.3f" % a)
0.312
>>>
我期待 0.313 而不是 0.312 任何关于为什么会这样的想法,有没有其他方法可以用来获得 0.313?
谢谢
根据 IEEE 754 标准,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) if ndigits >= 0 else part * 10 ** abs(ndigits)
示例用法:
In [12]: my_round(0.3125, 3)
Out[12]: 0.313
注意:在 python2 中舍入总是远离零,而在 python3 中舍入为偶数。(例如,参见round
2.7 和 3.3 之间函数的文档中的差异)。
如果您需要准确性,请不要使用 float,请使用Decimal
>>> from decimal import *
>>> d = Decimal(0.3125)
>>> getcontext().rounding = ROUND_UP
>>> round(d, 3)
Decimal('0.313')
甚至分数
尝试
print '%.3f' % round(.3125,3)
我有同样不正确的舍入
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'