当 5 出现在第 (n+1) 位时,是否有关于如何将带小数点的数字四舍五入到 %.nf 的规则?
Is there a rule about how numbers with decimal points are rounded by %.nf when 5 comes at the (n+1)-th?
我正在尝试 python 打印功能并遇到了这个问题。
print('%.2f' % (0.665)) # 0.67
print('%.3f' % (0.0625))# 0.062
因为0.665保留两位小数结果是0.67,我期望0.0625保留三位小数的输出是0.063但是结果是0.062。
一般规则是,当数字的四舍五入部分恰好为 5 时,您选择使最终结果数字为偶数的方向 - 这可以避免在这些中间情况下出现任何系统偏差。这适用于 0.0625
的情况,它是一种不常见的十进制数,在浮点二进制中具有 精确 表示 - 它的最后一位确实是 5。(对于在这种情况下四舍五入的数字示例,请尝试 0.375
到两个位置。)另一方面,数字 0.665
实际上并不存在 - 最接近的浮点值实际上是0.6650000000000000355271。四舍五入的部分肯定(虽然只是略微)大于5,所以必然四舍五入。
浮点数舍入通常是一个恼人的问题。
.0625 可以用精确的方式表示,所以向下取整。 (2 是偶数,所以最常用的舍入算法决定在这些情况下向下舍入。)
.665 不能以精确的方式表示(它的内部表示比给定的数字略小或略大。在这种情况下,它可能略大,所以尽管 5 之前的 6 是偶数,它四舍五入。
我正在尝试 python 打印功能并遇到了这个问题。
print('%.2f' % (0.665)) # 0.67
print('%.3f' % (0.0625))# 0.062
因为0.665保留两位小数结果是0.67,我期望0.0625保留三位小数的输出是0.063但是结果是0.062。
一般规则是,当数字的四舍五入部分恰好为 5 时,您选择使最终结果数字为偶数的方向 - 这可以避免在这些中间情况下出现任何系统偏差。这适用于 0.0625
的情况,它是一种不常见的十进制数,在浮点二进制中具有 精确 表示 - 它的最后一位确实是 5。(对于在这种情况下四舍五入的数字示例,请尝试 0.375
到两个位置。)另一方面,数字 0.665
实际上并不存在 - 最接近的浮点值实际上是0.6650000000000000355271。四舍五入的部分肯定(虽然只是略微)大于5,所以必然四舍五入。
浮点数舍入通常是一个恼人的问题。
.0625 可以用精确的方式表示,所以向下取整。 (2 是偶数,所以最常用的舍入算法决定在这些情况下向下舍入。)
.665 不能以精确的方式表示(它的内部表示比给定的数字略小或略大。在这种情况下,它可能略大,所以尽管 5 之前的 6 是偶数,它四舍五入。