9.5. fractions有理数

在 2.6 版本新。

源程序代码:Lib/fractions.py


分数模块为有理数运算提供了支持。

可以构造一个分数实例,从一对整数,另一个有理数,或一个字符串。

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

第一个版本需要分子分母都是数字实例。理性,并返回一个新的部分实例,以分子或分母的值。如果分母0,它将引发的ZeroDivisionError第二个版本要求, other_fraction 数字实例。理性,并返回一个具有相同的值的部分实例。在接下来的两个版本接受一个浮点数十进制。十进制实例,并返回一个具有完全相同的值的部分实例。注意到,由于与二进制浮点常见问题 (见浮点算术: 问题和限制)、 Fraction(1.1)的参数是不完全等于 11/10 和Fraction(1.1)也是如此归还分数 (11, 10)正如你可能期望。(但请参见下面的limit_denominator()方法的文档)。构造函数的最后一个版本预计将一个字符串或 unicode 的实例。此实例的一般形式为:

[sign] numerator ['/' denominator]

可选的标志可以是 '+' 或 '-' 和分子分母(如果存在) 是十进制数字的字符串。此外,任何字符串表示一个有限值,被接受由浮法构造函数也接受了分数的构造函数。在两种形式的输入的字符串也可能领先和/或尾随空格。这里有一些例子:

>>> 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)

分数类继承自抽象基类数字。理性,并实现所有的方法和从该类的操作。分数实例是 hashable,并应视为永远不变。此外,部分具有以下方法:

2.7 版本中的更改:分数构造函数现在接受浮法十进制。十进制实例。

from_float(flt)

此类方法构造一个分数表示的精确值的外语教学,必须一个浮点数当心Fraction.from_float(0.3)不是相同的值分数 (3, 10)

从 Python 2.7 起,你还可以构造一个分数实例直接从一个浮点数

from_decimal(dec)

此类方法构造一个分数表示的精确值的dec,这必须的小数。十进制。

从 Python 2.7 以后,你还可以构造直接从十进制分数实例。十进制实例。

limit_denominator(max_denominator=1000000)

查找并返回最接近的分数分母在大多数 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)

返回的整数b最大公因数。如果要么ab不为零,然后绝对值的最大公因数 (a、 b)是划分两个ab的最大整数。 gcd(a,b)具有相同的符号bb为非零值 ; 如果否则,它将的标志。最大公因数 (0、 0)将返回0

请参见

Module numbers
The abstract base classes making up the numeric tower.