fractions — Rationale Zahlen¶
Quellcode: Lib/fractions.py
Das Modul fractions bietet Unterstützung für die Arithmetik mit rationalen Zahlen.
Eine `Fraction`-Instanz kann aus einem Paar rationaler Zahlen, aus einer einzelnen Zahl oder aus einem String erstellt werden.
- class fractions.Fraction(numerator=0, denominator=1)¶
- class fractions.Fraction(number)
- class fractions.Fraction(string)
Die erste Version erfordert, dass numerator und denominator Instanzen von
numbers.Rationalsind und gibt eine neueFraction-Instanz mit dem Wertnumerator/denominatorzurück. Wenn denominator Null ist, wird einZeroDivisionErrorausgelöst.Die zweite Version erfordert, dass number eine Instanz von
numbers.Rationalist oder die Methodeas_integer_ratio()besitzt (dies schließtfloatunddecimal.Decimalein). Sie gibt eineFraction-Instanz mit exakt demselben Wert zurück. Es wird angenommen, dass die Methodeas_integer_ratio()ein Paar teilerfremder ganzer Zahlen zurückgibt und die letzte positiv ist. Beachten Sie, dass aufgrund der üblichen Probleme mit binären Punkten (siehe Gleitkomma-Arithmetik: Probleme und Einschränkungen), das Argument fürFraction(1.1)nicht exakt gleich 11/10 ist, und daherFraction(1.1)nichtFraction(11, 10)zurückgibt, wie man vielleicht erwarten würde. (Aber siehe die Dokumentation für die Methodelimit_denominator()unten.)Die letzte Version des Konstruktors erwartet einen String. Die übliche Form für diese Instanz ist
[sign] numerator ['/' denominator]
wobei das optionale
signentweder '+' oder '-' sein kann undnumeratorunddenominator(falls vorhanden) Strings mit Dezimalziffern sind (Unterstriche dürfen zur Abgrenzung von Ziffern wie bei ganzzahligen Literalen in Code verwendet werden). Zusätzlich werden alle Strings, die einen endlichen Wert darstellen und vomfloat-Konstruktor akzeptiert werden, auch vomFraction-Konstruktor akzeptiert. In beiden Formen kann der Eingabestring auch führende und/oder nachgestellte Leerzeichen enthalten. Hier sind einige Beispiele>>> 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)
Die Klasse
Fractionerbt von der abstrakten Basisklassenumbers.Rationalund implementiert alle Methoden und Operationen dieser Klasse.Fraction-Instanzen sind hashable und sollten als unveränderlich behandelt werden. Darüber hinaus verfügtFractionüber die folgenden Eigenschaften und MethodenGeändert in Version 3.2: Der Konstruktor
Fractionakzeptiert jetzt Instanzen vonfloatunddecimal.Decimal.Geändert in Version 3.9: Die Funktion
math.gcd()wird nun verwendet, um numerator und denominator zu normalisieren.math.gcd()gibt immer einenint-Typ zurück. Zuvor hing der GCD-Typ von numerator und denominator ab.Geändert in Version 3.11: Unterstriche sind nun beim Erstellen einer
Fraction-Instanz aus einem String erlaubt, gemäß den Regeln von PEP 515.Geändert in Version 3.11:
Fractionimplementiert nun__int__, umtyping.SupportsIntInstanzprüfungen zu erfüllen.Geändert in Version 3.12: Leerzeichen sind nun um den Schrägstrich für String-Eingaben erlaubt:
Fraction('2 / 3').Geändert in Version 3.12:
Fraction-Instanzen unterstützen nun das Formatieren im Float-Stil mit den Darstellungstypen"e","E","f","F","g","G"und"%"".Geändert in Version 3.13: Das Formatieren von
Fraction-Instanzen ohne einen Darstellungstyp unterstützt nun Füllzeichen, Ausrichtung, Vorzeichenbehandlung, Mindestbreite und Gruppierung.Geändert in Version 3.14: Der Konstruktor
Fractionakzeptiert nun beliebige Objekte mit der Methodeas_integer_ratio().- numerator¶
Zähler des Bruchs in gekürzter Form.
- denominator¶
Nenner des Bruchs in gekürzter Form. Garantiert positiv.
- as_integer_ratio()¶
Gibt ein Tupel aus zwei ganzen Zahlen zurück, deren Verhältnis gleich dem ursprünglichen Bruch ist. Das Verhältnis ist gekürzt und hat einen positiven Nenner.
Hinzugefügt in Version 3.8.
- is_integer()¶
Gibt
Truezurück, wenn der Bruch eine ganze Zahl ist.Hinzugefügt in Version 3.12.
- classmethod from_float(f)¶
Alternativer Konstruktor, der nur Instanzen von
floatodernumbers.Integralakzeptiert. Vorsicht:Fraction.from_float(0.3)hat nicht denselben Wert wieFraction(3, 10).
- classmethod from_decimal(dec)¶
Alternativer Konstruktor, der nur Instanzen von
decimal.Decimalodernumbers.Integralakzeptiert.Hinweis
Ab Python 3.2 können Sie auch direkt aus einer
decimal.Decimal-Instanz eineFraction-Instanz erstellen.
- classmethod from_number(number)¶
Alternativer Konstruktor, der nur Instanzen von
numbers.Integral,numbers.Rational,floatoderdecimal.Decimalsowie Objekte mit der Methodeas_integer_ratio()akzeptiert, aber keine Strings.Hinzugefügt in Version 3.14.
- limit_denominator(max_denominator=1000000)¶
Findet und gibt den nächstgelegenen
Fractionzuselfzurück, der einen Nenner von höchstens max_denominator hat. Diese Methode ist nützlich, um rationale Annäherungen an eine gegebene Gleitkommazahl zu finden>>> from fractions import Fraction >>> Fraction('3.1415926535897932').limit_denominator(1000) Fraction(355, 113)
oder um eine rationale Zahl wiederherzustellen, die als Gleitkommazahl dargestellt ist.
>>> 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__()¶
Gibt die größte ganze Zahl
intzurück, die kleiner oder gleichselfist. Diese Methode kann auch über die Funktionmath.floor()aufgerufen werden.>>> from math import floor >>> floor(Fraction(355, 113)) 3
- __ceil__()¶
Gibt die kleinste ganze Zahl
intzurück, die größer oder gleichselfist. Diese Methode kann auch über die Funktionmath.ceil()aufgerufen werden.
- __round__()¶
- __round__(ndigits)
Die erste Version gibt die nächstgelegene ganze Zahl
intzuselfzurück, wobei halb gerundet wird (zur geraden Zahl). Die zweite Version rundetselfauf das nächste Vielfache vonFraction(1, 10**ndigits)(logischerweise, wennndigitsnegativ ist), ebenfalls halb zur geraden Zahl gerundet. Diese Methode kann auch über die Funktionround()aufgerufen werden.
- __format__(format_spec, /)¶
Bietet Unterstützung für die Formatierung von
Fraction-Instanzen über die Methodestr.format(), die eingebaute Funktionformat()oder Formatierte Zeichenkettenliterale.Wenn der Formatierungsstring
format_specnicht mit einem der Darstellungstypen'e','E','f','F','g','G'oder'%'endet, folgt die Formatierung den allgemeinen Regeln für Füllzeichen, Ausrichtung, Vorzeichenbehandlung, Mindestbreite und Gruppierung, wie im Format-Spezifikations-Mini-Sprache beschrieben. Das Flag für die alternative Form'#'wird unterstützt: Wenn es vorhanden ist, erzwingt es, dass die Ausgabezeichenkette immer einen expliziten Nenner enthält, auch wenn der formatierte Wert eine exakte ganze Zahl ist. Das Nullfüllungsflag'0'wird nicht unterstützt.Wenn der Formatierungsstring
format_specmit einem der Darstellungstypen'e','E','f','F','g','G'oder'%'endet, folgt die Formatierung den Regeln, die für denfloat-Typ im Abschnitt Format Specification Mini-Language beschrieben sind.Hier sind einige Beispiele
>>> from fractions import Fraction >>> 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'
Siehe auch
- Modul
numbers Die abstrakten Basisklassen, die den numerischen Turm bilden.