Python 有理數(分數)


任何可以表示為 p/q 形式的商或分數的數都稱為有理數。Python 庫的分數模組提供了有理數運算的功能。

此模組定義了一個 Fraction 類。它的物件可以透過多種方式構成,如下所示:

Fraction(num, denom)

Fraction 建構函式的第一個版本接收分子和分母的兩個引數。預設分子為 0,預設分母為 1。分母的值為 0 將引發 ZeroDivisionError。

>>> from fractions 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 類具有以下有用的方法,用於查詢小於商的最大整數(底值)和大於商的最小整數(頂值)。

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

另一個類方法 limit_denominator() 返回最接近的分數,其分母最大等於指定值。

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

本文討論了 Python 標準庫中 fractions 模組的功能和函式。

更新於:2019年7月30日

2K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告