Python ROUND_HALF_EVEN的工作原理

how python ROUND_HALF_EVEN works

提问人:Adil Khatri 提问时间:6/28/2023 最后编辑:Sam MasonAdil Khatri 更新时间:6/29/2023 访问量:72

问:

为什么即使在我的全局上下文“舍入”设置为 之后,我也会得到 0.27 作为我的答案?round(0.265, 2)ROUND_HALF_EVEN

这是我的代码。

import decimal
from decimal import Decimal

print(decimal.getcontext())

a = 0.265
print(Decimal(a))
print(round(a, 2)) # current output: 0.27

这是输出

Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
0.26500000000000001332267629550187848508358001708984375
0.27

我很困惑,因为我认为输出应该是 0.26 而不是 0.27,因为四舍五入设置为 .ROUND_HALF_EVEN

Python 数学 浮点 舍入

评论

4赞 Paul 6/28/2023
0.26500000000000001332267629550187848508358001708984375不是 2.6 和 2.7 之间的中间。它更接近 2.7。

答:

5赞 Paul 6/28/2023 #1

0.26500000000000001332267629550187848508358001708984375是 0.265 的二进制近似值,更接近 0.27。

尽量保持精确度。a = Decimal('0.265')

https://www.programiz.com/python-programming/methods/built-in/round