python与浮点数不正确的舍入

时间:2013-08-27 19:07:42

标签: python rounding

>>> a = 0.3135
>>> print("%.3f" % a)
0.314
>>> a = 0.3125
>>> print("%.3f" % a)
0.312
>>>

我期待0.313而不是0.312 任何想过为什么会这样,有没有其他方法可以用来获得0.313?

由于

4 个答案:

答案 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