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]
where the optional
sign
may be either “+” or “-” andnumerator
anddenominator
(if present) are strings of decimal digits (underscores may be used to delimit digits as with integral literals in code). In addition, any string that represents a finite value and is accepted by thefloat
constructor is also accepted by theFraction
constructor. In either form the input string may also have leading and/or trailing whitespace. Here are some examples:>>> 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
Fraction
hereda de la clase base abstractanumbers.Rational
, e implementa todos los métodos y operaciones de esa clase. Las instanciasFraction
son hashable, y deben ser tratadas como inmutables. AdicionalmenteFraction
tiene 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.Distinto en la versión 3.11: Underscores are now permitted when creating a
Fraction
instance from a string, following PEP 515 rules.Distinto en la versión 3.11:
Fraction
implements__int__
now to satisfytyping.SupportsInt
instance checks.Distinto en la versión 3.12: Space is allowed around the slash for string inputs:
Fraction('2 / 3')
.Distinto en la versión 3.12:
Fraction
instances now support float-style formatting, with presentation types"e"
,"E"
,"f"
,"F"
,"g"
,"G"
and"%""
.- 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.
- is_integer()¶
Return
True
if the Fraction is an integer.Nuevo en la versión 3.12.
- 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()
.
- __format__(format_spec, /)¶
Provides support for float-style formatting of
Fraction
instances via thestr.format()
method, theformat()
built-in function, or Formatted string literals. The presentation types"e"
,"E"
,"f"
,"F"
,"g"
,"G"
and"%"
are supported. For these presentation types, formatting for aFraction
objectx
follows the rules outlined for thefloat
type in the Especificación de formato Mini-Lenguaje section.Here are some examples:
>>> from fractions import Fraction >>> format(Fraction(1, 7), '.40g') '0.1428571428571428571428571428571428571429' >>> format(Fraction('1234567.855'), '_.2f') '1_234_567.86' >>> f"{Fraction(355, 113):*>20.6e}" '********3.141593e+00' >>> old_price, new_price = 499, 672 >>> "{:.2%} price increase".format(Fraction(new_price, old_price) - 1) '34.67% price increase'
Ver también
- Módulo
numbers
Las clases base abstractas que representan la jerarquía de números.