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.Rational
y retorna una nueva instancia deFraction
con valornumerator/denominator
. Si denominator es0
, esto arrojará un errorZeroDivisionError
. La segunda versión necesita que other_fraction sea una instancia denumbers.Rational
y retorna una instanciaFraction
con el mismo valor. Las restantes dos versiones aceptan igualmente instanciasfloat
odecimal.Decimal
y retornan una instanciaFraction
con 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
sign
opcional puede ser “+” o “-” ynumerator
ydenominator
(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 defloat
tambié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)
The
Fraction
class inherits from the abstract base classnumbers.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.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
float
ornumbers.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.Decimal
ornumbers.Integral
.Nota
Desde Python 3.2 en adelante, puedes construir una instancia
Fraction
directamente desde una instanciadecimal.Decimal
.
-
limit_denominator
(max_denominator=1000000)¶ Busca y retorna la instancia de
Fraction
mas cercana aself
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ó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
int
mas cercano aself
redondeando mitades al valor par. La segunda versión redondeaself
al múltiplo mas cercano deFraction(1, 10**ndigits)
(lógicamente, sindigits
es 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.