17db96d56Sopenharmony_ci:mod:`fractions` --- Rational numbers 27db96d56Sopenharmony_ci===================================== 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: fractions 57db96d56Sopenharmony_ci :synopsis: Rational numbers. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. moduleauthor:: Jeffrey Yasskin <jyasskin at gmail.com> 87db96d56Sopenharmony_ci.. sectionauthor:: Jeffrey Yasskin <jyasskin at gmail.com> 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci**Source code:** :source:`Lib/fractions.py` 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci-------------- 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciThe :mod:`fractions` module provides support for rational number arithmetic. 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ci 177db96d56Sopenharmony_ciA Fraction instance can be constructed from a pair of integers, from 187db96d56Sopenharmony_cianother rational number, or from a string. 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ci.. class:: Fraction(numerator=0, denominator=1) 217db96d56Sopenharmony_ci Fraction(other_fraction) 227db96d56Sopenharmony_ci Fraction(float) 237db96d56Sopenharmony_ci Fraction(decimal) 247db96d56Sopenharmony_ci Fraction(string) 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci The first version requires that *numerator* and *denominator* are instances 277db96d56Sopenharmony_ci of :class:`numbers.Rational` and returns a new :class:`Fraction` instance 287db96d56Sopenharmony_ci with value ``numerator/denominator``. If *denominator* is :const:`0`, it 297db96d56Sopenharmony_ci raises a :exc:`ZeroDivisionError`. The second version requires that 307db96d56Sopenharmony_ci *other_fraction* is an instance of :class:`numbers.Rational` and returns a 317db96d56Sopenharmony_ci :class:`Fraction` instance with the same value. The next two versions accept 327db96d56Sopenharmony_ci either a :class:`float` or a :class:`decimal.Decimal` instance, and return a 337db96d56Sopenharmony_ci :class:`Fraction` instance with exactly the same value. Note that due to the 347db96d56Sopenharmony_ci usual issues with binary floating-point (see :ref:`tut-fp-issues`), the 357db96d56Sopenharmony_ci argument to ``Fraction(1.1)`` is not exactly equal to 11/10, and so 367db96d56Sopenharmony_ci ``Fraction(1.1)`` does *not* return ``Fraction(11, 10)`` as one might expect. 377db96d56Sopenharmony_ci (But see the documentation for the :meth:`limit_denominator` method below.) 387db96d56Sopenharmony_ci The last version of the constructor expects a string or unicode instance. 397db96d56Sopenharmony_ci The usual form for this instance is:: 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci [sign] numerator ['/' denominator] 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ci where the optional ``sign`` may be either '+' or '-' and 447db96d56Sopenharmony_ci ``numerator`` and ``denominator`` (if present) are strings of 457db96d56Sopenharmony_ci decimal digits (underscores may be used to delimit digits as with 467db96d56Sopenharmony_ci integral literals in code). In addition, any string that represents a finite 477db96d56Sopenharmony_ci value and is accepted by the :class:`float` constructor is also 487db96d56Sopenharmony_ci accepted by the :class:`Fraction` constructor. In either form the 497db96d56Sopenharmony_ci input string may also have leading and/or trailing whitespace. 507db96d56Sopenharmony_ci Here are some examples:: 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci >>> from fractions import Fraction 537db96d56Sopenharmony_ci >>> Fraction(16, -10) 547db96d56Sopenharmony_ci Fraction(-8, 5) 557db96d56Sopenharmony_ci >>> Fraction(123) 567db96d56Sopenharmony_ci Fraction(123, 1) 577db96d56Sopenharmony_ci >>> Fraction() 587db96d56Sopenharmony_ci Fraction(0, 1) 597db96d56Sopenharmony_ci >>> Fraction('3/7') 607db96d56Sopenharmony_ci Fraction(3, 7) 617db96d56Sopenharmony_ci >>> Fraction(' -3/7 ') 627db96d56Sopenharmony_ci Fraction(-3, 7) 637db96d56Sopenharmony_ci >>> Fraction('1.414213 \t\n') 647db96d56Sopenharmony_ci Fraction(1414213, 1000000) 657db96d56Sopenharmony_ci >>> Fraction('-.125') 667db96d56Sopenharmony_ci Fraction(-1, 8) 677db96d56Sopenharmony_ci >>> Fraction('7e-6') 687db96d56Sopenharmony_ci Fraction(7, 1000000) 697db96d56Sopenharmony_ci >>> Fraction(2.25) 707db96d56Sopenharmony_ci Fraction(9, 4) 717db96d56Sopenharmony_ci >>> Fraction(1.1) 727db96d56Sopenharmony_ci Fraction(2476979795053773, 2251799813685248) 737db96d56Sopenharmony_ci >>> from decimal import Decimal 747db96d56Sopenharmony_ci >>> Fraction(Decimal('1.1')) 757db96d56Sopenharmony_ci Fraction(11, 10) 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci 787db96d56Sopenharmony_ci The :class:`Fraction` class inherits from the abstract base class 797db96d56Sopenharmony_ci :class:`numbers.Rational`, and implements all of the methods and 807db96d56Sopenharmony_ci operations from that class. :class:`Fraction` instances are :term:`hashable`, 817db96d56Sopenharmony_ci and should be treated as immutable. In addition, 827db96d56Sopenharmony_ci :class:`Fraction` has the following properties and methods: 837db96d56Sopenharmony_ci 847db96d56Sopenharmony_ci .. versionchanged:: 3.2 857db96d56Sopenharmony_ci The :class:`Fraction` constructor now accepts :class:`float` and 867db96d56Sopenharmony_ci :class:`decimal.Decimal` instances. 877db96d56Sopenharmony_ci 887db96d56Sopenharmony_ci .. versionchanged:: 3.9 897db96d56Sopenharmony_ci The :func:`math.gcd` function is now used to normalize the *numerator* 907db96d56Sopenharmony_ci and *denominator*. :func:`math.gcd` always return a :class:`int` type. 917db96d56Sopenharmony_ci Previously, the GCD type depended on *numerator* and *denominator*. 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci .. versionchanged:: 3.11 947db96d56Sopenharmony_ci Underscores are now permitted when creating a :class:`Fraction` instance 957db96d56Sopenharmony_ci from a string, following :PEP:`515` rules. 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_ci .. versionchanged:: 3.11 987db96d56Sopenharmony_ci :class:`Fraction` implements ``__int__`` now to satisfy 997db96d56Sopenharmony_ci ``typing.SupportsInt`` instance checks. 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci .. attribute:: numerator 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_ci Numerator of the Fraction in lowest term. 1047db96d56Sopenharmony_ci 1057db96d56Sopenharmony_ci .. attribute:: denominator 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci Denominator of the Fraction in lowest term. 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ci 1107db96d56Sopenharmony_ci .. method:: as_integer_ratio() 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci Return a tuple of two integers, whose ratio is equal 1137db96d56Sopenharmony_ci to the Fraction and with a positive denominator. 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ci .. versionadded:: 3.8 1167db96d56Sopenharmony_ci 1177db96d56Sopenharmony_ci .. classmethod:: from_float(flt) 1187db96d56Sopenharmony_ci 1197db96d56Sopenharmony_ci Alternative constructor which only accepts instances of 1207db96d56Sopenharmony_ci :class:`float` or :class:`numbers.Integral`. Beware that 1217db96d56Sopenharmony_ci ``Fraction.from_float(0.3)`` is not the same value as ``Fraction(3, 10)``. 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ci .. note:: 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci From Python 3.2 onwards, you can also construct a 1267db96d56Sopenharmony_ci :class:`Fraction` instance directly from a :class:`float`. 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci 1297db96d56Sopenharmony_ci .. classmethod:: from_decimal(dec) 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci Alternative constructor which only accepts instances of 1327db96d56Sopenharmony_ci :class:`decimal.Decimal` or :class:`numbers.Integral`. 1337db96d56Sopenharmony_ci 1347db96d56Sopenharmony_ci .. note:: 1357db96d56Sopenharmony_ci 1367db96d56Sopenharmony_ci From Python 3.2 onwards, you can also construct a 1377db96d56Sopenharmony_ci :class:`Fraction` instance directly from a :class:`decimal.Decimal` 1387db96d56Sopenharmony_ci instance. 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci .. method:: limit_denominator(max_denominator=1000000) 1427db96d56Sopenharmony_ci 1437db96d56Sopenharmony_ci Finds and returns the closest :class:`Fraction` to ``self`` that has 1447db96d56Sopenharmony_ci denominator at most max_denominator. This method is useful for finding 1457db96d56Sopenharmony_ci rational approximations to a given floating-point number: 1467db96d56Sopenharmony_ci 1477db96d56Sopenharmony_ci >>> from fractions import Fraction 1487db96d56Sopenharmony_ci >>> Fraction('3.1415926535897932').limit_denominator(1000) 1497db96d56Sopenharmony_ci Fraction(355, 113) 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ci or for recovering a rational number that's represented as a float: 1527db96d56Sopenharmony_ci 1537db96d56Sopenharmony_ci >>> from math import pi, cos 1547db96d56Sopenharmony_ci >>> Fraction(cos(pi/3)) 1557db96d56Sopenharmony_ci Fraction(4503599627370497, 9007199254740992) 1567db96d56Sopenharmony_ci >>> Fraction(cos(pi/3)).limit_denominator() 1577db96d56Sopenharmony_ci Fraction(1, 2) 1587db96d56Sopenharmony_ci >>> Fraction(1.1).limit_denominator() 1597db96d56Sopenharmony_ci Fraction(11, 10) 1607db96d56Sopenharmony_ci 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ci .. method:: __floor__() 1637db96d56Sopenharmony_ci 1647db96d56Sopenharmony_ci Returns the greatest :class:`int` ``<= self``. This method can 1657db96d56Sopenharmony_ci also be accessed through the :func:`math.floor` function: 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_ci >>> from math import floor 1687db96d56Sopenharmony_ci >>> floor(Fraction(355, 113)) 1697db96d56Sopenharmony_ci 3 1707db96d56Sopenharmony_ci 1717db96d56Sopenharmony_ci 1727db96d56Sopenharmony_ci .. method:: __ceil__() 1737db96d56Sopenharmony_ci 1747db96d56Sopenharmony_ci Returns the least :class:`int` ``>= self``. This method can 1757db96d56Sopenharmony_ci also be accessed through the :func:`math.ceil` function. 1767db96d56Sopenharmony_ci 1777db96d56Sopenharmony_ci 1787db96d56Sopenharmony_ci .. method:: __round__() 1797db96d56Sopenharmony_ci __round__(ndigits) 1807db96d56Sopenharmony_ci 1817db96d56Sopenharmony_ci The first version returns the nearest :class:`int` to ``self``, 1827db96d56Sopenharmony_ci rounding half to even. The second version rounds ``self`` to the 1837db96d56Sopenharmony_ci nearest multiple of ``Fraction(1, 10**ndigits)`` (logically, if 1847db96d56Sopenharmony_ci ``ndigits`` is negative), again rounding half toward even. This 1857db96d56Sopenharmony_ci method can also be accessed through the :func:`round` function. 1867db96d56Sopenharmony_ci 1877db96d56Sopenharmony_ci 1887db96d56Sopenharmony_ci.. seealso:: 1897db96d56Sopenharmony_ci 1907db96d56Sopenharmony_ci Module :mod:`numbers` 1917db96d56Sopenharmony_ci The abstract base classes making up the numeric tower. 192