python 对浮点数进行不正确的舍入

2024-06-20

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

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

Thanks


Python 3 根据 IEEE 754 标准进行舍入,使用舍入到偶数 http://en.wikipedia.org/wiki/IEEE_floating_point#Rounding_rules方法。

如果您想以不同的方式进行舍入,那么只需手动实现即可:

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

Note:在 python2 中,舍入总是远离零,而在 python3 中,舍入到偶数。 (例如,请参阅文档中的差异round2.7 和 3.3 之间的函数)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 对浮点数进行不正确的舍入 的相关文章

随机推荐