<分区>
二分之一,即十进制的 0.5,具有精确的二进制表示:0.1
不过,如果我将它四舍五入为整数,我会得到 0 而不是 1。我在 Python 和 C 中尝试过,它们的行为相同。例如。 python 代码:
>>> a,b,c = 0.49, 0.5, 0.51
>>> [round(x) for x in (a,b,c)]
[0, 0, 1]
>>> "%.0f %.0f %.0f" % (a,b,c)
'0 0 1'
有趣的是,
>>> a,b,c = 0.049, 0.05, 0.051
>>> [round(x,1) for x in (a,b,c)]
[0.0, 0.1, 0.1]
>>> "%.1f %.1f %.1f" % (a,b,c)
'0.0 0.1 0.1'
我知道许多类似的问题,例如Python rounding error with float numbers , Python tutorial on floating point arithmetics ,以及强制性的 What Every Computer Scientist Should Know About Floating-Point Arithmetic .
如果一个数字有一个精确的二进制表示,例如(十进制)0.5,它不应该被正确舍入吗?
edit:3.4.3版本有问题,2.7.6版本没有