Сообщить об ошибке.

Методы экземпляра класса Fractuon()

Класс fractions.Fraction наследуется от абстрактного базового класса numbers.Rational и реализует все методы и операции этого класса. Кроме того, Fraction() обладает своими свойствами и методами:

Содержание:


Fraction.numerator:

Свойство Fraction.numerator возвращает числитель дроби.

>>> from fractions import Fraction
>>> x = Fraction(3, 8)
>>> x.numerator
# 3

Fraction.denominator:

Свойство Fraction.denominator возвращает знаменатель дроби.

>>> from fractions import Fraction
>>> x = Fraction(3, 8)
>>> x.denominator
# 8

Fraction.from_float(flt):

Метод Fraction.from_float() принимает число flt [типа float] и возвращает дробь, отношение числителя к знаменателю которой максимально приближается к значению flt.

>>> from fractions import Fraction
>>> Fraction.from_float(0.5)
# Fraction(1, 2)
>>> Fraction.from_float(1.1)
# Fraction(2476979795053773, 2251799813685248)

Как можно заметить, из-за проблем хранения чисел с плавающей точкой в двоичном представлении Fraction.from_float(1.1) вовсе не равно Fraction(11, 10).

Fraction.from_decimal(dec):

Метод Fraction.from_decimal() создает дробь, которая является точным представлением десятичной дроби указанной в dec, где dec - это экземпляр класса decimal.Decimal.

>>> from fractions import Fraction
>>> from decimal import Decimal
>>> Fraction.from_decimal(Decimal('0.1'))
# Fraction(1, 10)
>>> Fraction.from_decimal(Decimal('0.11'))
# Fraction(11, 100)
>>> Fraction.from_decimal(Decimal('0.125'))
# Fraction(1, 8)

Fraction.limit_denominator(max_denominator=1000000):

Метод Fraction.limit_denominator() возвращает ближайшее рациональное представление указанного числа, знаменатель которого не превышает значение max_denominator.

>>> from fractions import Fraction
>>> Fraction(1.1)
# Fraction(2476979795053773, 2251799813685248)
>>> Fraction(1.1).limit_denominator(10)
# Fraction(11, 10)
>>> Fraction(3.1415926).limit_denominator(1000)
# Fraction(355, 113)

Данный метод позволяет получать рациональные приближения и восстанавливать рациональные значения по их неточному представлению в виде чисел с плавающей точкой.

>>> from fractions import Fraction
>>> 2**(1/3)
# 1.2599210498948732
>>> Fraction(2**(1/3)).limit_denominator()
# Fraction(1054215, 836731)
>>> 1054215/836731
# 1.2599210498953666

>>> from math import *
>>> Fraction(cos(pi/3))
# Fraction(4503599627370497, 9007199254740992)
>>> Fraction(cos(pi/3)).limit_denominator()
# Fraction(1, 2)

Fraction.__floor__():

Метод Fraction.__floor__() возвращает значение типа int, которое является наибольшим среди всех int <= self. Этот метод также доступен через функцию math.floor().

>>> from fractions import Fraction
>>> from math import *
>>> Fraction(234, 47).__floor__()
# 4
>>> floor(Fraction(234, 47))
# 4

Fraction.__ceil__():

Метод Fraction.__ceil__() возвращает значение типа int, которое является наименьшим среди всех int >= self. Этот метод также доступен через функцию math.ceil().

>>> from fractions import Fraction
>>> from math import *
>>> Fraction(234, 47).__ceil__()
# 5
>>> ceil(Fraction(234, 47))
# 5

Fraction.__round__(ndigits=None):

Метод Fraction.__round__() округляет до ближайшего четного числа. Этот метод также доступен через встроенную функцию round().

Если ndigits=None, то округление выполняется до ближайшего четного целого числа:

>>> from fractions import Fraction
>>> Fraction('1/2').__round__()
# 0
>>> Fraction('3/2').__round__()
# 2

Если ndigits не равно None, то округление выполняется до ближайшего числа кратного Fraction(1, 10**ndigits), при этом если последняя цифра 5, то округление будет выполнено к ближайшей четной цифре:

>>> from fractions import Fraction
>>> Fraction('7/3').__round__(1)
# Fraction(23, 10)
>>> Fraction('7/3').__round__(2)
# Fraction(233, 100)

Если ndigits меньше 0, то округление выполняется до разряда на который указывает abs(ndigits), при этом если последняя цифра 5, то округление будет выполнено к ближайшей четной цифре.

>>> from fractions import Fraction
>>> Fraction('357/3').__round__(-1)
# Fraction(120, 1)
>>> Fraction('357/3').__round__(-2)
# Fraction(100, 1)
>>> Fraction('357/5').__round__(-2)
# Fraction(100, 1)
>>> Fraction('357/5').__round__(-1)
# Fraction(70, 1)