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.
-
from_float(flt)¶ Este método de clase construye una instancia de
Fractionrepresentando el valor exacto de flt que debe ser unfloat. Ten cuidado, observa queFraction.from_float(0.3)no es el mismo valor queFraction(3, 10).
-
from_decimal(dec)¶ Este método de clase construye una instancia de
Fractionrepresentando el valor exacto de dec, que debe ser una instancia dedecimal.Decimal.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.