# `fractions` — Números racionales

Source code: Lib/fractions.py

El módulo `fractions` provee soporte para aritmética de números racionales.

Una instancia de Fraction puede construirse desde dos enteros, desde otro número racional, o desde una cadena de caracteres.

class fractions.Fraction(numerator=0, denominator=1)
class fractions.Fraction(other_fraction)
class fractions.Fraction(float)
class fractions.Fraction(decimal)
class fractions.Fraction(string)

  The first version requires that numerator and denominator are instances of `numbers.Rational` and returns a new `Fraction` instance with value `numerator/denominator`. If denominator is `0`, it raises a `ZeroDivisionError`. The second version requires that other_fraction is an instance of `numbers.Rational` and returns a `Fraction` instance with the same value. The next two versions accept either a `float` or a `decimal.Decimal` instance, and return a `Fraction` instance with exactly the same value. Note that due to the usual issues with binary floating-point (see Aritmética de Punto Flotante: Problemas y Limitaciones), the argument to `Fraction(1.1)` is not exactly equal to 11/10, and so `Fraction(1.1)` does not return `Fraction(11, 10)` as one might expect. (But see the documentation for the `limit_denominator()` method below.) The last version of the constructor expects a string or unicode instance. The usual form for this instance is:

      [sign] numerator ['/' denominator]

  donde el `sign` opcional puede ser “+” o “-” y `numerator` y `denominator` (si están presentes) son cadenas de caracteres de dígitos decimales (guiones bajos se pueden usar para delimitar dígitos como con las integrales literales en el código). Además, cualquier cadena de caracteres que represente un valor finito y sea aceptado por el constructor de `float` también es aceptado por el constructor de `Fraction`. En cualquier caso, la cadena de caracteres de entrada también puede tener espacios en blanco iniciales y / o finales. Aquí hay unos ejemplos:

      >>> from fractions import Fraction
      >>> Fraction(16, -10)
      Fraction(-8, 5)
      >>> Fraction(123)
      Fraction(123, 1)
      >>> Fraction()
      Fraction(0, 1)
      >>> Fraction('3/7')
      Fraction(3, 7)
      >>> Fraction(' -3/7 ')
      Fraction(-3, 7)
      >>> Fraction('1.414213 \t\n')
      Fraction(1414213, 1000000)
      >>> Fraction('-.125')
      Fraction(-1, 8)
      >>> Fraction('7e-6')
      Fraction(7, 1000000)
      >>> Fraction(2.25)
      Fraction(9, 4)
      >>> Fraction(1.1)
      Fraction(2476979795053773, 2251799813685248)
      >>> from decimal import Decimal
      >>> Fraction(Decimal('1.1'))
      Fraction(11, 10)

  The `Fraction` class inherits from the abstract base class `numbers.Rational`, and implements all of the methods and operations from that class. `Fraction` instances are hashable, and should be treated as immutable. In addition, `Fraction` has the following properties and methods:

  Distinto en la versión 3.2: El constructor de `Fraction` ahora acepta instancias de `float` y `decimal`.

  Distinto en la versión 3.9: La función `math.gcd()` ahora se usa para normalizar el numerator y denominator. `math.gcd()` siempre retorna un tipo `int`. Anteriormente, el tipo de GCD dependía de numerator y denominator.

  Distinto en la versión 3.11: Ahora se permiten guiones bajos al crear una instancia de `Fraction` a partir de una cadena de caracteres, siguiendo las reglas de PEP 515.

  Distinto en la versión 3.11: `Fraction` ahora implementa `__int__` para satisfacer las comprobaciones de instancia de `typing.SupportsInt`.

  numerator

    Numerador de la fracción irreducible.

  denominator

    Denominador de la fracción irreducible.

  as_integer_ratio()

    Retorna una tupla de dos enteros, cuyo ratio es igual a la fracción y con un denominador positivo.

    Nuevo en la versión 3.8.

  classmethod from_float(flt)

    Constructor alternativo que solo acepta instancias de `float` o `numbers.Integral`. Ten cuidado que `Fraction.from_float(0.3)` no es lo mismo que `Fraction(3, 10)`.

    Nota

    Desde Python 3.2 en adelante, puedes construir una instancia `Fraction` directamente desde `float`.

  classmethod from_decimal(dec)

    Constructor alternativo que solo acepta instancias de `decimal.Decimal` o `numbers.Integral`.

    Nota

    Desde Python 3.2 en adelante, puedes construir una instancia `Fraction` directamente desde una instancia `decimal.Decimal`.

  limit_denominator(max_denominator=1000000)

    Busca y retorna la instancia de `Fraction` mas cercana a `self` que tenga como denominador max_denominator. Este método es útil para encontrar aproximaciones racionales a un número en punto flotante determinado:

        >>> from fractions import Fraction
        >>> Fraction('3.1415926535897932').limit_denominator(1000)
        Fraction(355, 113)

    o para recuperar un numero racional que esta representado como flotante:

        >>> from math import pi, cos
        >>> Fraction(cos(pi/3))
        Fraction(4503599627370497, 9007199254740992)
        >>> Fraction(cos(pi/3)).limit_denominator()
        Fraction(1, 2)
        >>> Fraction(1.1).limit_denominator()
        Fraction(11, 10)

  __floor__()

    Retorna el máximo `int` `<= self`. Este método puede accederse también a través de la función `math.floor()`:

        >>> from math import floor
        >>> floor(Fraction(355, 113))
        3

  __ceil__()

    Retorna el mínimo `int` `>= self`. Este método puede accederse también a través de la función `math.ceil()`.

  __round__()
  __round__(ndigits)

    La primera versión retorna el valor `int` mas cercano a `self` redondeando mitades al valor par. La segunda versión redondea `self` al múltiplo mas cercano de `Fraction(1, 10**ndigits)` (lógicamente, si `ndigits` es negativo), nuevamente redondeando mitades al valor par. Este método también puede accederse a través de la función `round()`.

Ver también

Módulo `numbers`

  Las clases base abstractas que representan la jerarquía de números.