用分數計算分數(有理數)

商業

使用標準 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
Copied title and URL