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

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

谢谢

4

4 回答 4

9

根据 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 中舍入为偶数。(例如,参见round2.7 和 3.3 之间函数的文档中的差异)。

于 2013-08-27T19:18:16.047 回答
2

如果您需要准确性,请不要使用 float,请使用Decimal

>>> from decimal import *
>>> d = Decimal(0.3125)
>>> getcontext().rounding = ROUND_UP
>>> round(d, 3)
Decimal('0.313')

甚至分数

于 2019-11-01T07:32:56.747 回答
0

尝试

print '%.3f' % round(.3125,3)
于 2013-08-27T19:16:19.657 回答
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'

于 2019-07-01T10:31:54.793 回答