python:`int`和`float`的组合

时间:2011-07-11 23:40:05

标签: python floating-point python-3.x

作为其他一些计算的一部分,我注意到我有时将float()然后int()函数应用于整数输入。假设:

是否安全
int(float(x)) == x

如果x是整数?

为什么呢? (或者为什么不呢?)它是否记录在任何地方?

4 个答案:

答案 0 :(得分:8)

如果x需要的精度高于双精度浮点数所提供的精度,则比较将失败。

>>> int(float(10**23))
99999999999999991611392L

答案 1 :(得分:5)

>>> x = 10**300
>>> int(float(x)) == x
False

答案 2 :(得分:4)

  

为什么呢? (或者为什么不呢?)它是否记录在任何地方?

每个程序员都应该清楚知道的权威指南之一:

What Every Programmer Should Know About Floating-Point Arithmetic

答案 3 :(得分:3)

表单significant_digits * (2 ** exponent)的所有数字都具有精确表示为浮点数,只要您有足够的位来表示significant_digitsexponent。大多数平台使用IEEE 754双重表示,而Python使用平台的双重表示。 IEEE 754双精度为exponent有11位,significant digits有52位。只要你的数字符合这些界限,它们就会按预期出现。

请参阅Python's docs on floating point representation和维基百科关于floating points的文章。