fractions.md
1> **Источник:** https://python-all.ru/3.0/library/fractions.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `fractions` – Рациональные числа89Модуль `fractions` предоставляет поддержку арифметики с рациональными числами.1011Экземпляр Fraction может быть создан из пары целых чисел, из другого рационального числа или из строки.1213#### `[fractions.Fraction]class fractions.Fraction(numerator=0, denominator=1)`1415#### `class fractions.Fraction(other_fraction)`1617#### `class fractions.Fraction(string)`1819Первая версия требует, чтобы *numerator* и *denominator* были экземплярами [`numbers.Integral`](https://python-all.ru/3.0/library/numbers.html#numbers.Integral) и возвращает новый экземпляр [`Fraction`](https://python-all.ru/3.0/library/fractions.html#fractions.Fraction) со значением `numerator/denominator`. Если *denominator* равен `0`, возбуждается [`ZeroDivisionError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ZeroDivisionError). Вторая версия требует, чтобы *other\_fraction* был экземпляром [`numbers.Rational`](https://python-all.ru/3.0/library/numbers.html#numbers.Rational) и возвращает экземпляр [`Fraction`](https://python-all.ru/3.0/library/fractions.html#fractions.Fraction) с тем же значением. Последняя версия конструктора ожидает экземпляр строки в одной из двух возможных форм. Первая форма:2021```python22[sign] numerator ['/' denominator]23```2425где необязательный `sign` может быть либо '+' или '-', а `numerator` и `denominator` (если присутствуют) являются строками десятичных цифр. Вторая допустимая форма – число, содержащее десятичную точку:2627```python28[sign] integer '.' [fraction] | [sign] '.' fraction29```3031где `integer` и `fraction` являются строками цифр. В обеих формах входная строка может также содержать начальные и/или конечные пробелы. Вот несколько примеров:3233```python34>>> from fractions import Fraction35>>> Fraction(16, -10)36Fraction(-8, 5)37>>> Fraction(123)38Fraction(123, 1)39>>> Fraction()40Fraction(0, 1)41>>> Fraction('3/7')42Fraction(3, 7)43[40794 refs]44>>> Fraction(' -3/7 ')45Fraction(-3, 7)46>>> Fraction('1.414213 \t\n')47Fraction(1414213, 1000000)48>>> Fraction('-.125')49Fraction(-1, 8)50```5152Класс [`Fraction`](https://python-all.ru/3.0/library/fractions.html#fractions.Fraction) наследует от абстрактного базового класса [`numbers.Rational`](https://python-all.ru/3.0/library/numbers.html#numbers.Rational) и реализует все методы и операции этого класса. Экземпляры [`Fraction`](https://python-all.ru/3.0/library/fractions.html#fractions.Fraction) хешируемы и должны рассматриваться как неизменяемые. Кроме того, [`Fraction`](https://python-all.ru/3.0/library/fractions.html#fractions.Fraction) имеет следующие методы:5354#### `[fractions.Fraction.from_float]from_float(flt)`5556Этот метод класса создает объект5758[`Fraction`](https://python-all.ru/3.0/library/fractions.html#fractions.Fraction)5960, представляющий точное значение6162*flt*6364, который должен быть6566[`float`](https://python-all.ru/3.0/library/functions.html#float)6768. Имейте в виду, что6970`Fraction.from_float(0.3)`7172не равно значению7374`Fraction(3, 10)`7576#### `[fractions.Fraction.from_decimal]from_decimal(dec)`7778Этот метод класса создает7980[`Fraction`](https://python-all.ru/3.0/library/fractions.html#fractions.Fraction)8182, представляющий точное значение8384*dec*8586, который должен быть экземпляром8788[`decimal.Decimal`](https://python-all.ru/3.0/library/decimal.html#decimal.Decimal)8990.9192#### `[fractions.Fraction.limit_denominator]limit_denominator(max_denominator=1000000)`9394Находит и возвращает ближайший [`Fraction`](https://python-all.ru/3.0/library/fractions.html#fractions.Fraction) к `self`, у которого знаменатель не превышает max\_denominator. Этот метод полезен для поиска рациональных приближений к заданному числу с плавающей запятой:9596```python97>>> from fractions import Fraction98>>> Fraction('3.1415926535897932').limit_denominator(1000)99Fraction(355, 113)100```101102или для восстановления рационального числа, представленного в виде числа с плавающей точкой:103104```python105>>> from math import pi, cos106>>> Fraction.from_float(cos(pi/3))107Fraction(4503599627370497, 9007199254740992)108>>> Fraction.from_float(cos(pi/3)).limit_denominator()109Fraction(1, 2)110```111112#### `[fractions.Fraction.__floor__]__floor__()`113114Возвращает наибольшее [`int`](https://python-all.ru/3.0/library/functions.html#int) `<= self`. Этот метод также можно вызвать через функцию [`math.floor()`](https://python-all.ru/3.0/library/math.html#math.floor):115116```python117>>> from math import floor118>>> floor(Fraction(355, 113))1193120```121122#### `[fractions.Fraction.__ceil__]__ceil__()`123124Возвращает наименьшее125126[`int`](https://python-all.ru/3.0/library/functions.html#int)127128`>= self`129130. Этот метод также можно вызвать через функцию131132[`math.ceil()`](https://python-all.ru/3.0/library/math.html#math.ceil)133134.135136#### `[fractions.Fraction.__round__]__round__()`137138#### `__round__(ndigits)`139140Первая версия возвращает ближайшее141142[`int`](https://python-all.ru/3.0/library/functions.html#int)143144к145146`self`147148, округляя половину до ближайшего четного. Вторая версия округляет149150`self`151152до ближайшего кратного153154`Fraction(1, 10**ndigits)`155156(логически, если157158`ndigits`159160отрицательно), также округляя половину к четному. Этот метод также можно вызвать через функцию161162[`round()`](https://python-all.ru/3.0/library/functions.html#round)163164.165166#### `[fractions.gcd]fractions.gcd(a, b)`167168Возвращает наибольший общий делитель целых чисел169170*a*171172и173174*b*175176. Если либо177178*a*179180, либо181182*b*183184не равно нулю, то абсолютное значение185186`gcd(a, b)`187188является наибольшим целым числом, которое делит как189190*a*191192, так и193194*b*195196.197198`gcd(a,b)`199200имеет тот же знак, что и201202*b*203204, если205206*b*207208не равно нулю; в противном случае он принимает знак209210*a*211212.213214`gcd(0, 0)`215216возвращает217218`0`219220.221222> **См. также**223>224> **Модуль [`numbers`](https://python-all.ru/3.0/library/numbers.html#module-numbers)**225>226> Абстрактные базовые классы, составляющие числовую иерархию.227