为什么Python中的float对象没有denominator属性,而int呢?

时间:2012-02-22 20:53:41

标签: python types floating-point int

当我在搞乱Python时,

>>> [attr for attr in dir(1) if not attr.startswith('_')]
['bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real']
>>> [attr for attr in dir(1.1) if not attr.startswith('_')]
['as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real']

虽然我理解'共轭','成像'和'真实'是为了与复杂类型兼容,但我不明白为什么'分子'和'分母'只存在于int中,并且不存在不适合漂浮。

对此有何解释?

3 个答案:

答案 0 :(得分:5)

这很可能是因为花车有些有损 - 它们不能很好地代表每一个价值。考虑这个例子:

>>> 1.0/5.0
0.20000000000000001

如果您想访问,1.0/5.0 python的分母必须返回1801439850948198420000000000000001/100000000000000000 == 3602879701896397/18014398509481984)。精度的损失将导致python别无选择,只能返回疯狂的值,因此设计人员选择不实现该功能。

答案 1 :(得分:5)

查看数字类层次结构:Python numbers

numbers.Integralnumbers.Rational

的子类

这是数字.Rational增加了分子和分母成员。

答案 2 :(得分:2)

这是因为intrational的子类,float不是。由于rational具有分母属性,int继承了它。

您可以阅读更多here