fractions
— Rational numbers¶
Source code:Lib/fractions.py
Thefractions
module provides support for rational number arithmetic.
A Fraction instance can be constructed from a pair of integers, fromanother rational number, or from a string.
- classfractions.Fraction(numerator=0,denominator=1)¶
- classfractions.Fraction(number)
- classfractions.Fraction(string)
The first version requires thatnumerator anddenominator are instancesof
numbers.Rational
and returns a newFraction
instancewith valuenumerator/denominator
. Ifdenominator is0
, itraises aZeroDivisionError
.The second version requires thatnumber is an instance of
numbers.Rational
or has theas_integer_ratio()
method(this includesfloat
anddecimal.Decimal
).It returns aFraction
instance with exactly the same value.Assumed, that theas_integer_ratio()
method returns a pairof coprime integers and last one is positive.Note that due to theusual issues with binary point (seeΑριθμητική Κινητής Υποδιαστολής: Ζητήματα και Περιορισμοί), theargument toFraction(1.1)
is not exactly equal to 11/10, and soFraction(1.1)
doesnot returnFraction(11,10)
as one might expect.(But see the documentation for thelimit_denominator()
method below.)The last version of the constructor expects a string.The usual form for this instance is:
[sign]numerator['/'denominator]
where the optional
sign
may be either “+” or “-” andnumerator
anddenominator
(if present) are strings ofdecimal digits (underscores may be used to delimit digits as withintegral literals in code). In addition, any string that represents a finitevalue and is accepted by thefloat
constructor is alsoaccepted by theFraction
constructor. In either form theinput string may also have leading and/or trailing whitespace.Here are some examples:>>>fromfractionsimportFraction>>>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)>>>fromdecimalimportDecimal>>>Fraction(Decimal('1.1'))Fraction(11, 10)
The
Fraction
class inherits from the abstract base classnumbers.Rational
, and implements all of the methods andoperations from that class.Fraction
instances arehashable,and should be treated as immutable. In addition,Fraction
has the following properties and methods:Άλλαξε στην έκδοση 3.2:The
Fraction
constructor now acceptsfloat
anddecimal.Decimal
instances.Άλλαξε στην έκδοση 3.9:The
math.gcd()
function is now used to normalize thenumeratoranddenominator.math.gcd()
always returns anint
type.Previously, the GCD type depended onnumerator anddenominator.Άλλαξε στην έκδοση 3.11:Underscores are now permitted when creating a
Fraction
instancefrom a string, followingPEP 515 rules.Άλλαξε στην έκδοση 3.11:
Fraction
implements__int__
now to satisfytyping.SupportsInt
instance checks.Άλλαξε στην έκδοση 3.12:Space is allowed around the slash for string inputs:
Fraction('2/3')
.Άλλαξε στην έκδοση 3.12:
Fraction
instances now support float-style formatting, withpresentation types"e"
,"E"
,"f"
,"F"
,"g"
,"G"
and"%""
.Άλλαξε στην έκδοση 3.13:Formatting of
Fraction
instances without a presentation typenow supports fill, alignment, sign handling, minimum width and grouping.Άλλαξε στην έκδοση 3.14:The
Fraction
constructor now accepts any objects with theas_integer_ratio()
method.- numerator¶
Numerator of the Fraction in lowest term.
- denominator¶
Denominator of the Fraction in lowest term.
- as_integer_ratio()¶
Return a tuple of two integers, whose ratio is equalto the original Fraction. The ratio is in lowest termsand has a positive denominator.
Added in version 3.8.
- is_integer()¶
Return
True
if the Fraction is an integer.Added in version 3.12.
- classmethodfrom_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)
.
- classmethodfrom_decimal(dec)¶
Alternative constructor which only accepts instances of
decimal.Decimal
ornumbers.Integral
.Σημείωση
From Python 3.2 onwards, you can also construct a
Fraction
instance directly from adecimal.Decimal
instance.
- classmethodfrom_number(number)¶
Alternative constructor which only accepts instances of
numbers.Integral
,numbers.Rational
,float
ordecimal.Decimal
, and objects withtheas_integer_ratio()
method, but not strings.Added in version 3.14.
- limit_denominator(max_denominator=1000000)¶
Finds and returns the closest
Fraction
toself
that hasdenominator at most max_denominator. This method is useful for findingrational approximations to a given floating-point number:>>>fromfractionsimportFraction>>>Fraction('3.1415926535897932').limit_denominator(1000)Fraction(355, 113)
or for recovering a rational number that’s represented as a float:
>>>frommathimportpi,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__()¶
Returns the greatest
int
<=self
. This method canalso be accessed through themath.floor()
function:>>>frommathimportfloor>>>floor(Fraction(355,113))3
- __ceil__()¶
Returns the least
int
>=self
. This method canalso be accessed through themath.ceil()
function.
- __round__()¶
- __round__(ndigits)
The first version returns the nearest
int
toself
,rounding half to even. The second version roundsself
to thenearest multiple ofFraction(1,10**ndigits)
(logically, ifndigits
is negative), again rounding half toward even. Thismethod can also be accessed through theround()
function.
- __format__(format_spec,/)¶
Provides support for formatting of
Fraction
instances via thestr.format()
method, theformat()
built-in function, orFormatted string literals.If the
format_spec
format specification string does not end with oneof the presentation types'e'
,'E'
,'f'
,'F'
,'g'
,'G'
or'%'
then formatting follows the general rules for fill,alignment, sign handling, minimum width, and grouping as described in theformat specification mini-language. The «alternateform» flag'#'
is supported: if present, it forces the output stringto always include an explicit denominator, even when the value beingformatted is an exact integer. The zero-fill flag'0'
is notsupported.If the
format_spec
format specification string ends with one ofthe presentation types'e'
,'E'
,'f'
,'F'
,'g'
,'G'
or'%'
then formatting follows the rules outlined for thefloat
type in theFormat Specification Mini-Language section.Here are some examples:
>>>fromfractionsimportFraction>>>format(Fraction(103993,33102),'_')'103_993/33_102'>>>format(Fraction(1,7),'.^+10')'...+1/7...'>>>format(Fraction(3,1),'')'3'>>>format(Fraction(3,1),'#')'3/1'>>>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'
Δείτε επίσης
- Module
numbers
The abstract base classes making up the numeric tower.