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) La primera versión necesita que numerator y denominator sean instancias de
numbers.Rationaly retorna una nueva instancia deFractioncon valornumerator/denominator. Si denominator es0, esto arrojará un errorZeroDivisionError. La segunda versión necesita que other_fraction sea una instancia denumbers.Rationaly retorna una instanciaFractioncon el mismo valor. Las restantes dos versiones aceptan igualmente instanciasfloatodecimal.Decimaly retornan una instanciaFractioncon exactamente el mismo valor. Nota que debido a los problemas usuales con la representación binaria en punto flotante (ver Aritmética de Punto Flotante: Problemas y Limitaciones), el argumento deFraction(1.1)no es exactamente igual a 11/10, por lo queFraction(1.1)no retornaFraction(11, 10)como uno esperaría. (Mira la documentación para el métodolimit_denominator()abajo.) La última versión del constructor espera una cadena de caracteres o una instancia Unicode. La forma usual para esta instancia es:[sign] numerator ['/' denominator]
donde el
signopcional puede ser “+” o “-” ynumeratorydenominator(si están presentes) son cadenas de caracteres de dígitos decimales. Además, cualquier cadena de caracteres que represente un valor finito y sea aceptado por el constructor defloattambién es aceptado por el constructor deFraction. 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)
La clase
Fractionhereda de la clase base abstractanumbers.Rational, e implementa todos los métodos y operaciones de esa clase. Las instanciasFractionson hashable, y deben ser tratadas como inmutables. AdicionalmenteFractiontiene los siguientes métodos y propiedades: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 tipoint. Anteriormente, el tipo de GCD dependía de numerator y denominator.-
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)¶ Alternative constructor which only accepts instances of
floatornumbers.Integral. Beware thatFraction.from_float(0.3)is not the same value asFraction(3, 10).
-
classmethod
from_decimal(dec)¶ Alternative constructor which only accepts instances of
decimal.Decimalornumbers.Integral.Nota
Desde Python 3.2 en adelante, puedes construir una instancia
Fractiondirectamente desde una instanciadecimal.Decimal.
-
limit_denominator(max_denominator=1000000)¶ Busca y retorna la instancia de
Fractionmas cercana aselfque 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ónmath.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ónmath.ceil().
-
__round__()¶ -
__round__(ndigits) La primera versión retorna el valor
intmas cercano aselfredondeando mitades al valor par. La segunda versión redondeaselfal múltiplo mas cercano deFraction(1, 10**ndigits)(lógicamente, sindigitses negativo), nuevamente redondeando mitades al valor par. Este método también puede accederse a través de la funciónround().
-
Ver también
- Módulo
numbers Las clases base abstractas que representan la jerarquía de números.