【发布时间】:2014-07-20 15:34:14
【问题描述】:
我用python对浮点数进行四舍五入,我对计算机如何四舍五入感到困惑。例如:
round(1.55, 1) = 1.6 # this is what I would expect; however
round(1.65, 1) = 1.6 #this is what confuses me. Is it supposed to be 1.7?
另一个例子:
round(1.85, 1) = 1.9
round(1.95, 1) = 1.9
我猜这可能与二进制和十进制之间的转换有关。我的问题是我怎么知道结尾 5 是否会被省略?非常感谢您的帮助!
【问题讨论】:
-
Python 使用banker's rounding。这是 IEEE 754 计算函数和运算符中使用的默认舍入模式。
-
你读过the docs吗?有一个关于这个问题的注释。
-
@MarkRansom 很有趣。我必须调查一下,但我怀疑
1.5实际上是1.499999999...所以会舍入到1但我必须做一些调查。 -
非常感谢你们,伙计们。我阅读了文档并了解到您可以导入十进制模块,然后在您有疑问时使用 Decimal(Your number) 来检查确切的值。这真的很有帮助。
-
@Cyber:Python 2.7 将平局从零开始。只有 Python 3.x 将平局打平。 (Python 2.6 及更早版本没有正确舍入的舍入函数,因此中途情况的行为是不可预测的。)1.5 正好是 1.5。