fractions
fractions — Rational numbers
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)
第一个版本要求分子
和分母
是实例,numbers.Rational
并返回一个Fraction
带有值的新实例numerator/denominator
。如果分母
是0
,它提出了一个ZeroDivisionError
。第二个版本要求other_fraction
是一个实例,numbers.Rational
并返回一个Fraction
具有相同值的实例。接下来的两个版本接受一个float
或一个decimal.Decimal
实例,并返回一个Fraction
具有完全相同值的实例。需要注意的是,由于与二进制浮点常见问题(见浮点运算:问题和限制),该参数Fraction(1.1)
是不完全等于11/10
,所以Fraction(1.1)
不不像
Fraction(11, 10)
人们所期望的那样回报。(但请参阅limit_denominator()
下面方法的文档。)构造函数的最后一个版本需要一个字符串或unicode实例。这种情况的通常形式是:
[sign] numerator ['/' denominator]
其中可选项sign
可以是'+'或' - ',numerator
并且denominator
(如果存在)是十进制数字的字符串。此外,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)
本Fraction
类从抽象基类继承numbers.Rational
,并实现所有从该类的方法和操作。Fraction
实例是可散列的,应该被视为不可变的。另外,Fraction
有以下方法:
在版本2.7中更改:Fraction
构造函数现在接受float
和decimal.Decimal
实例。
from_float(flt)
这个类方法构造了一个Fraction
代表flt
的确切值,它必须是a float
。当心这Fraction.from_float(0.3)
与价值不同Fraction(3, 10)
。
注意
从Python 2.7开始,您也可以Fraction
直接从a 构建一个实例float
。
from_decimal(dec)
这个类方法构造了一个Fraction
代表dec
的确切值的值,它必须是decimal.Decimal
。
注意
从Python 2.7开始,您还可以Fraction
直接从decimal.Decimal
实例构建实例。
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)
返回整数a
和b的
最大公约数。如果a
或b
不为零,那么绝对值gcd(a, b)
是将a
和b
分开的最大整数。如果b
不为零,则gcd(a,b)
与b
具有相同的符号; 否则它需要的符号一个
。返回。gcd(0, 0)0