python-1:Number數字類型 之三 相關函數 Fraction


fractions模塊

fractions模塊提供了分數類型的支持。


Fraction類

該類是fractions模塊的核心,它繼承了numbers.Rational類並且實現了該類所有的方法。

構造函數並不復雜:

class fractions.Fraction(numerator=0, denominator=1)
class fractions.Fraction(int|float|str|Decimal|Fraction)

可以同時提供分子(numerator)和分母(denominator)給構造函數用於實例化Fraction類,但兩者必須同時是int類型或者numbers.Rational類型,否則會拋出類型錯誤。當分母為0,初始化的時候會導致拋出異常ZeroDivisionError。

而如果只提供一個參數,則可以用上述五種類型進行初始化。當使用字符串進行初始化時,fractions模塊使用內置的正則表達式進行匹配。而使用浮點數或者Decimal進行初始化時,fractions模塊會在內部調用as_integer_ratio()。

下面的代碼示例來自官方文檔,展示了各種實例化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)

限制分母

fractions.Fraction.limit_denominator(max_denominator=1000000)

有時候將浮點數或者Decimal作為Fraction實例的初始化數據可能會遇到舍入誤差的問題,如上面調用Fraction(1.1)時不返回Fraction(11, 10)的例子。這時Fraction類提供了一個實例方法limit_denominator()用於減小這種誤差。這個方法本來是為了通過限制分母來得到一個近似值,但是在出現舍入誤差的時候反倒使得結果更加精確了,如下面的例子:

>>> from fractions import Fraction >>> Fraction(1.1) Fraction(2476979795053773, 2251799813685248) >>> Fraction(1.1).limit_denominator() Fraction(11, 10)

將Fraction用於算術運算、關系運算和其他多種操作

上面提到,Fraction類繼承了numbers.Rational類並且實現了該類所有的方法。所以Fraction類事實上通過重載很多特殊函數,使得其實例可以直接用於多種算術運算。

不僅支持算術運算,Fraction類同時也支持關系運算、pickle模塊、copy模塊和哈希值的計算。

>>> from fractions import Fraction >>> x = Fraction(1, 2) >>> y = Fraction(1, 3) >>> x + y Fraction(5, 6) >>> x - y Fraction(1, 6) >>> x * y Fraction(1, 6) >>> x / y Fraction(3, 2) >>> x ** 2 Fraction(1, 4) >>> -x Fraction(-1, 2) >>> abs(x) Fraction(1, 2) >>> round(x) 0 >>> import math >>> math.floor(x) 0 >>> math.ceil(x) 1 >>> x == y False >>> x > y True

其他函數

fractions.Fraction.from_float(flt)
fractions.Fraction.from_decimal(dec)

在Python3.2之前,Fraction類不支持通過將浮點數和Decimal傳入構造方法來獲得實例。而是提供了上面兩個類方法,通過調用類方法的方式來產生實例,目前版本(Python 3.6.1)這兩個類方法仍然存在。


fractions.gcd(a, b)

用於計算最大公約數。這個函數在Python3.5之后就廢棄了,官方建議使用math.gcd()。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM