【发布时间】:2013-05-16 00:38:26
【问题描述】:
在 600 行的长代码中,我有一部分代码会计算一些奇怪的东西。
idl = 0
print type(dl), dl
idl = int(dl*10)+1
print idl
这会返回:
<type 'float'> 0.1
1
这个计算是在我的代码的定义中完成的。 这显然不是预期的结果。奇怪的是,当我将上面的代码复制到一个单独的 python 文件中时:
idl = 0
dl = 0.1
print type(dl), dl
idl = int(dl*10)+1
print idl
我明白了:
<type 'float'> 0.1
2
这个问题的根源可能是什么?我已经提取了这些部分,以使问题变得简单,但是如果您愿意,我可以提供更多信息。
【问题讨论】:
-
转换为 int 不会四舍五入您的数字,而是截断它。因此,您可以获得 0.999999 而不是 1,因此当转换为 int 时它给出 0。我不确定为什么不同地方的结果会有所不同......
-
也许
dl的值不像第一种情况那样接近 .1,但 Python 仅以有限的精度打印它。我建议您更精确地打印它(我不熟悉这样做的 Python 语法)或打印dl-.1以查看差异。正如 sashkello 所指出的,如果dl略小于.1,则dl*10略小于 1,转换为int会将其截断为零。
标签: python floating-point int