使用標準 Python 庫的分數模塊,您可以使用分數(有理數)執行計算。
下面解釋here。
- 分數的構造函數
- 以整數形式獲取分子和分母值
- 計算和比較分數(有理數)
- 將分數轉換為小數(浮點數)
- 分數到字符串 (str) 的轉換
- 獲得有理數逼近
分數的構造函數
有幾種方法可以創建 Fraction 實例。在所有情況下,分數都會自動分成分數。
將分子和分母指定為整數
將分子和分母分別指定為整數。如果省略分母,則假定為 1。
from fractions import Fraction print(Fraction(1, 3)) # 1/3 print(Fraction(2, 6)) # 1/3 print(Fraction(3)) # 3
小數(float)
如果傳遞了小數值,則將其轉換為小數。
print(Fraction(0.25)) # 1/4 print(Fraction(0.33)) # 5944751508129055/18014398509481984
如果您希望通過指定最大分母來近似,請使用下面描述的 limit_denominator() 方法。
字符串(str)
如果傳遞了字符串值,則將其轉換為分數。
print(Fraction('2/5')) # 2/5 print(Fraction('16/48')) # 1/3
以整數形式獲取分子和分母值
Fraction 類型的屬性允許您分別獲取分子和分母的整數值。它們不能改變。
numerator
denominator
a = Fraction(1, 3) print(a) # 1/3 print(a.numerator) print(type(a.numerator)) # 1 # <class 'int'> print(a.denominator) print(type(a.denominator)) # 3 # <class 'int'> # a.numerator = 7 # AttributeError: can't set attribute
計算和比較分數(有理數)
算術運算符可用於計算加法、減法等。
result = Fraction(1, 6) ** 2 + Fraction(1, 3) / Fraction(1, 2) print(result) print(type(result)) # 25/36 # <class 'fractions.Fraction'>
也可以使用比較運算符。
print(Fraction(7, 13) > Fraction(8, 15)) # True
將分數轉換為小數(浮點數)
可以使用 float() 將分數轉換為小數。
a_f = float(a) print(a_f) print(type(a_f)) # 0.3333333333333333 # <class 'float'>
用十進制數計算時,會自動轉換為浮點型。
b = a + 0.1 print(b) print(type(b)) # 0.43333333333333335 # <class 'float'>
分數到字符串 (str) 的轉換
要轉換為字符串,請使用 str()。
a_s = str(a) print(a_s) print(type(a_s)) # 1/3 # <class 'str'>
獲得有理數逼近
可以使用 Fraction 類型的方法 limit_denominator() 獲得有理數近似值。
返回分母小於或等於參數 max_denominator 的有理數(分數)。如果省略,max_denominator=1000000。
近似無理數,例如 pi 和 Napier 數 e
pi = Fraction(3.14159265359) print(pi) # 3537118876014453/1125899906842624 print(pi.limit_denominator(10)) print(pi.limit_denominator(100)) print(pi.limit_denominator(1000)) # 22/7 # 311/99 # 355/113 e = Fraction(2.71828182846) print(e) # 6121026514870223/2251799813685248 print(e.limit_denominator(10)) print(e.limit_denominator(100)) print(e.limit_denominator(1000)) # 19/7 # 193/71 # 1457/536
將循環小數轉換為分數
a = Fraction(0.565656565656) print(a) # 636872674577009/1125899906842624 print(a.limit_denominator()) # 56/99 a = Fraction(0.3333) print(a) # 6004199023210345/18014398509481984 print(a.limit_denominator()) print(a.limit_denominator(100)) # 3333/10000 # 1/3