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 标准库的分数模块的特性和功能。