Fraction类构造函数和Python中的from_float有什么区别?



我使用类构造函数Fraction来创建分数。当从浮点数创建分数时,使用Fraction类构造函数和from_float方法之间的区别是什么?

我用不同的数字测试了它,得到了相同的答案。例如:

from fractions import Fraction
f1 = Fraction(0.3)
f2 = Fraction.from_float(0.3)
print(f1)  # Output: 5404319552844595/18014398509481984
print(f2)  # Output: 5404319552844595/18014398509481984

来自文档:

在3.2版更改:Fraction构造函数现在接受floatdecimal.Decimal实例。

注意:从Python 3.2开始,您还可以直接从float构造Fraction实例。

换句话说,在Python中<3.2,你必须使用Fraction.from_floatfloat构造Fraction。自3.2以来,这已经变得不必要,但仍然存在,可能是为了不破坏向后兼容性。您可能还想使用它进行更显式的类型检查,因为如果传递其他类型,Fraction.from_float会引发错误,而Fraction构造函数可能会默默地接受这些类型,并且可能会导致微妙的错误。

阅读实现可以看到,在类型检查之后,函数from_float使用与Fraction(float)相同的方法获得分子和分母。即通过调用as_integer_ratio

最新更新