Python计算:浮点数和整数

时间:2013-05-16 00:38:27

标签: python floating-point int

在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

这个问题可能是什么原因?我已经提取了这些部分,以简化问题,但如果您愿意,我可以提供更多信息。

1 个答案:

答案 0 :(得分:2)

Eric Postpischil的评论是关键的。

Python试图隐藏临时用户的一些丑陋的浮点数。大多数时候,没关系。有时,你会感到惊讶。许多十进制数字并不精确地以二进制形式表示 - 它们变成重复或非常长的分数。 Python的显示代码将二进制浮点数转换为小数,有时会四舍五入到正确的位置。

以下是关于该主题的可靠参考:http://docs.python.org/2/tutorial/floatingpoint.html

您提供的代码段是正确的,但您可能希望使用int(round(dl*10))

如果浮点数十进制数学的不精确表示导致你惊愕 - 例如,如果你正在使用金钱,那么请查看十进制模块:http://docs.python.org/2/library/decimal.html#module-decimal

十进制模块提供了很好的十进制数学设施,但使用它比浮点更麻烦。

对于它的价值,这个问题并不是Python独有的。您会在大多数编程语言中找到类似的问题(以及类似的十进制数学库来解决问题。)