fractions --- 分数

源代码 Lib/

fractions 模块支持分数运算。


class fractions.Fraction(numerator=0, denominator=1)
class fractions.Fraction(other_fraction)
class fractions.Fraction(float)
class fractions.Fraction(decimal)
class fractions.Fraction(string)

第一个版本要求 numeratordenominatornumbers.Rational 的实例,并返回一个新的 Fraction 实例,其值为 numerator/denominator。 如果 denominator0 将会引发 ZeroDivisionError。 第二个版本要求 other_fractionnumbers.Rational 的实例,并返回一个 Fraction 实例且与传入值相等。 下两个版本接受 floatdecimal.Decimal 的实例,并返回一个 Fraction 实例且与传入值完全相等。 请注意由于二进制浮点数通常存在的问题 (参见 浮点算术:争议和限制),Fraction(1.1) 的参数并不会精确等于 11/10,因此 Fraction(1.1)不会 返回用户所期望的 Fraction(11, 10)。 (请参阅下文中 limit_denominator() 方法的文档。) 构造器的最后一个版本接受一个字符串或 unicode 实例。 此实例的通常形式为:

[sign] numerator ['/' denominator]

where the optional sign may be either '+' or '-' and numerator and denominator (if present) are strings of decimal digits (underscores may be used to delimit digits as with integral literals in code). In addition, any string that represents a finite value and is accepted by the float constructor is also accepted by the Fraction constructor. In either form the input string may also have leading and/or trailing whitespace. Here are some examples:

>>> from fractions import Fraction
>>> Fraction(16, -10)
Fraction(-8, 5)
>>> Fraction(123)
Fraction(123, 1)
>>> Fraction()
Fraction(0, 1)
>>> Fraction('3/7')
Fraction(3, 7)
>>> Fraction(' -3/7 ')
Fraction(-3, 7)
>>> Fraction('1.414213 \t\n')
Fraction(1414213, 1000000)
>>> Fraction('-.125')
Fraction(-1, 8)
>>> Fraction('7e-6')
Fraction(7, 1000000)
>>> Fraction(2.25)
Fraction(9, 4)
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> from decimal import Decimal
>>> Fraction(Decimal('1.1'))
Fraction(11, 10)

The Fraction class inherits from the abstract base class numbers.Rational, and implements all of the methods and operations from that class. Fraction instances are hashable, and should be treated as immutable. In addition, Fraction has the following properties and methods:

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

在 3.9 版更改: 现在会使用 math.gcd() 函数来正规化 numeratordenominatormath.gcd() 总是返回 int 类型。 在之前版本中,GCD 的类型取决于 numeratordenominator 的类型。

在 3.11 版更改: Underscores are now permitted when creating a Fraction instance from a string, following PEP 515 rules.

在 3.11 版更改: Fraction implements __int__ now to satisfy typing.SupportsInt instance checks.

在 3.12 版更改: Space is allowed around the slash for string inputs: Fraction('2 / 3').

在 3.12 版更改: Fraction instances now support float-style formatting, with presentation types "e", "E", "f", "F", "g", "G" and "%"".






Return a tuple of two integers, whose ratio is equal to the original Fraction. The ratio is in lowest terms and has a positive denominator.

3.8 新版功能.


Return True if the Fraction is an integer.

3.12 新版功能.

classmethod from_float(flt)

只接受 floatnumbers.Integral 实例的替代性构造器。 请注意 Fraction.from_float(0.3)Fraction(3, 10) 的值是不同的。


从 Python 3.2 开始,在构造 Fraction 实例时可以直接使用 float

classmethod from_decimal(dec)

只接受 decimal.Decimalnumbers.Integral 实例的替代性构造器。


从 Python 3.2 开始,在构造 Fraction 实例时可以直接使用 decimal.Decimal 实例。


找到并返回一个 Fraction 使得其值最接近 self 并且分母不大于 max_denominator。 此方法适用于找出给定浮点数的有理数近似值:

>>> from fractions import Fraction
>>> Fraction('3.1415926535897932').limit_denominator(1000)
Fraction(355, 113)


>>> from math import pi, cos
>>> Fraction(cos(pi/3))
Fraction(4503599627370497, 9007199254740992)
>>> Fraction(cos(pi/3)).limit_denominator()
Fraction(1, 2)
>>> Fraction(1.1).limit_denominator()
Fraction(11, 10)

返回最大的 int <= self。 此方法也可通过 math.floor() 函数来使用:

>>> from math import floor
>>> floor(Fraction(355, 113))

返回最小的 int >= self。 此方法也可通过 math.ceil() 函数来使用。


第一个版本返回一个 int 使得其值最接近 self,位值为二分之一时只对偶数舍入。第二个版本会将 self 舍入到最接近 Fraction(1, 10**ndigits) 的倍数(如果 ndigits 为负值则为逻辑运算),位值为二分之一时同样只对偶数舍入。 此方法也可通过 round() 函数来使用。

__format__(format_spec, /)

Provides support for float-style formatting of Fraction instances via the str.format() method, the format() built-in function, or Formatted string literals. The presentation types "e", "E", "f", "F", "g", "G" and "%" are supported. For these presentation types, formatting for a Fraction object x follows the rules outlined for the float type in the 格式规格迷你语言 section.

Here are some examples:

>>> from fractions import Fraction
>>> format(Fraction(1, 7), '.40g')
>>> format(Fraction('1234567.855'), '_.2f')
>>> f"{Fraction(355, 113):*>20.6e}"
>>> old_price, new_price = 499, 672
>>> "{:.2%} price increase".format(Fraction(new_price, old_price) - 1)
'34.67% price increase'


numbers 模块