Python 有理数(分数)

pythonserver side programmingprogramming

任何可以以 p/q 形式表示为商或分数的数字都称为有理数。Python 库的分数模块提供了有理数运算功能。

此模块定义了一个 Fraction 类。其对象可以以各种方式构成,如下所示 −

Fraction(num, denom)

Fraction 构造函数的第一个版本接收分子和分母两个参数。默认分子为 0,默认分母为 1。分母 = 0 的值会引发 ZeroDivisionError。

>>> from scores import Fraction
>>> n1 = Fraction(2,5)
>>> n1
Fraction(2, 5)
>>> n2 = Fraction(6,15)
>>> n2
Fraction(2, 5)
>>> n3 = Fraction(10,1)
>>> n3
Fraction(10, 1)
>>> n3 = Fraction(10)
>>> n3
Fraction(10, 1)

请注意,分子和分母参数除以公因数后会减少到最小值。

Fraction 构造函数也可以接收字符串参数,前提是它包含有效的数字表示形式。

>>> n1 = Fraction('5')
>>> n1
Fraction(5, 1)
>>> n2 = Fraction('4/7')
>>> n2
Fraction(4, 7)
>>> n3 = Fraction('0.25')
>>> n3
Fraction(1, 4)
>>> n4 = Fraction('1.23E4')
>>> n4
Fraction(12300, 1)

浮点数也可以作为构造函数的参数。但是,由于浮点数以纯二进制形式表示,因此所得的 Fraction 对象的分子和分母的商可能不准确。另一方面,作为参数的 Decimal 类对象也会产生一个 Fraction 对象。

>>> from fractions import Fraction
>>> from decimal import Decimal
>>> n1 = Fraction(2.1)
>>> n1
Fraction(4728779608739021, 2251799813685248)
>>> n2 = Fraction(Decimal('2.1'))
>>> n2
Fraction(21, 10)

所有算术运算均可用于 Fraction 对象。

>>> n1 = Fraction(2,3)
>>> n2 = Fraction(1,2)
>>> n1+n2
Fraction(7, 6)
>>> n1-n2
Fraction(1, 6)
>>> n1*n2
Fraction(1, 3)
>>> n1/n2
Fraction(4, 3)

回顾一下如何以商形式执行随机数运算 −

 

Fraction 对象有两个属性,分子和分母,可以独立访问。

>>> n1 = Fraction(2,3)
>>> n1.numerator
2
>>> n1.denominator
3

Fraction 类具有以下有用的方法来查找小于商的最大整数(floor 值)和大于商的最小整数(ceil 值)

>>> n1 = Fraction(355,113)
>>> n1.__floor__()
3
>>> n1.__ceil__()
4

另一个类方法 limit_denominator() 返回分母最接近指定值的最接近的分数。

>>> Fraction('2.71828').limit_denominator(400)
Fraction(1071, 394)

本文讨论了 Python 标准库的分数模块的特性和功能。


相关文章