Pythonのfractions(分数)モジュールを使って整数、浮動小数点、文字列を分数として扱う方法

スポンサーリンク

Python分数モジュールは、分数関連の計算を効率的に管理することができます

このモジュールは、整数、浮動小数点数、10進数、文字列から分数を作成することができます

この分数モジュールは有理数の算術演算をサポートしています。

分数モジュールの基本

  1. 分数モジュールのインポート
from fractions import Fraction
  1. 分数クラスのインスタンス化

分数クラスのインスタンス化:分数クラスのインスタンス化には、いくつかの方法があります。

以下はその一部です。

  • 分子と分母を渡す
  • float でインスタンス化する
  • 10進数でインスタンス化する
  • 文字列でインスタンス化する

例 分子と分母を渡してのインスタンス化

from fractions import Fraction
Fraction(1, 2)

例 浮動小数点数のインスタンス化

from fractions import Fraction
Fraction(2.5)

例 10進数でインスタンス化する

from fractions import Fraction
from decimal import Decimal
Fraction(Decimal('1.1'))

例 文字列のインスタンス化

from fractions import Fraction
Fraction('9/16')
スポンサーリンク

分数の作成

import fractions
 
for num, decimal in [(1, 2), (3, 6), (30, 7)]:
    result = fractions.Fraction(num, decimal)
    print('{}/{} = {}'.format(num, decimal, result))

結果は以下の通りです。

1/2 = 1/2
3/6 = 1/2
30/7 = 30/7

分数の算術演算をする

次の例では、分数に対するさまざまな算術演算を説明します。

from fractions import Fraction
 
print(Fraction(100, 10) + Fraction(25, 5))
 
print(Fraction(18, 5) / Fraction(18, 10))
 
print(Fraction(18, 15) * Fraction(16, 25))
 
print(Fraction(17, 25) * Fraction(15, 25))
 
print(Fraction(12, 5) ** Fraction(12, 11))

結果を出力すると、以下の様になります。

from fractions import Fraction
 
print(Fraction(10, 35))
  
print(Fraction(10, 13))
  
print(Fraction()) # default value

分数インスタンス

分数のインスタンスは、整数、有理数、文字列の組から構築される分数です。

分数はハッシュ可能で不変なので、一度作成したらその値を変更することはできません。

class fractions.Fraction(numerator=0, denominator=1) : 分子と分母が数値であることが必要です。

分母を0とした場合、ゼロ除算のエラーが発生します。

例えば、以下の様になります。

2/7
10/13
0

結果は以下の通りです。

import math
from fractions import Fraction
   
print("Square root: {}".format(math.sqrt(Fraction(21, 4))))
   
print("Floored to: {}".format(math.floor(Fraction(4100, 1100))))
   
print("Sined Fraction: {}".format(Fraction(math.sin(math.pi/2))))

分数を使った計算の組み合わせ

mathモジュールの機能は、分数表現と混在させることができます。

以下の例は、そのような表現です。

Square root: 2.29128784747792
Floored to: 3
Sined Fraction: 1

結果は以下の通りです。

import fractions
 
result = fractions.Fraction('21/8')
print('Rounded without limit : {}'.format(round(result)))
 
print('Rounded to 2 digits : {}'.format(round(result, 2)))

分数の四捨五入

分母を何桁にするかで四捨五入することができます

例えば、以下の様になります。

Rounded without limit : 3
Rounded to 2 digits : 131/50

結果は以下の通りです。

Output Arithmetic Operations On Fractions
Output-Arithmetic Operations On Fractions

まとめ

Pythonの分数モジュールの機能を理解し、実装することができました。

タイトルとURLをコピーしました