9.5. fractions — 分数

2.6 新版功能.

源代码 Lib/fractions.py


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]

其中的可选项 sign 可以为 ‘+’ 或 ‘-‘ 并且 numeratordenominator (如果存在) 是十进制数码的字符串。 此外,float 构造器所接受的任何表示一个有限值的字符串也都为 Fraction 构造器所接受。 不论哪种形式的输入字符串也都可以带有前缀和/或后缀的空格符。 这里是一些示例:

>>> 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 methods:

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

from_float(flt)

此类方法可构造一个 Fraction 来表示 flt 的精确值,该参数必须是一个 float。 请注意 Fraction.from_float(0.3) 的值并不等于 Fraction(3, 10)

注解

From Python 2.7 onwards, you can also construct a Fraction instance directly from a float.

from_decimal(dec)

This class method constructs a Fraction representing the exact value of dec, which must be a decimal.Decimal.

注解

From Python 2.7 onwards, you can also construct a Fraction instance directly from a decimal.Decimal instance.

limit_denominator(max_denominator=1000000)

找到并返回一个 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)
fractions.gcd(a, b)

返回整数 ab 的最大公约数。如果 ab 之一非零,则 gcd(a, b) 的绝对值是能同时整除 ab 的最大整数。若 b 非零,则 gcd(a,b)b 同号;否则返回值与 a 同号。gcd(0, 0) 返回 0

参见

numbers 模块

构成数字塔的所有抽象基类。