>>> from fractions import Fraction
>>> Fraction(2.6)
**Fraction(5854679515581645, 2251799813685248)**
>>> Fraction(2.6).limit_denominator(10)
Fraction(13,2)
>>> Fraction('2.6') #Fraction(str(2.6)) or Fraction(repr(2.6))
**Fraction(13,2)**
为什么Fraction不为float实例返回最接近的分数?
答案 0 :(得分:3)
请注意,由于二进制浮点的常见问题(请参阅Floating Point Arithmetic: Issues and Limitations),
Fraction(1.1)
的参数不完全等于11/10
,因此Fraction(1.1)
不会像预期的那样返回Fraction(11, 10)
。 (但请参阅下面limit_denominator()
方法的文档。)
基本上,2.6
无法用二进制精确表示。上面摘录中的问题和限制链接更加详细。
根据建议,您可以使用limit_denominator()
来提供帮助:
>>> from fractions import Fraction
>>> Fraction(2.6)
Fraction(5854679515581645, 2251799813685248)
>>> Fraction(2.6).limit_denominator(100)
Fraction(13, 5)
或者,您可以使用字符串输入(您似乎已经发现了它)。