bpo-37819: Add Fraction.as_integer_ratio() (GH-15212)
This commit is contained in:
parent
09a1872a80
commit
f03b4c8a48
|
@ -94,6 +94,13 @@ another rational number, or from a string.
|
|||
Denominator of the Fraction in lowest term.
|
||||
|
||||
|
||||
.. method:: as_integer_ratio()
|
||||
|
||||
Return a tuple of two integers, whose ratio is equal
|
||||
to the Fraction and with a positive denominator.
|
||||
|
||||
.. versionadded:: 3.8
|
||||
|
||||
.. method:: from_float(flt)
|
||||
|
||||
This class method constructs a :class:`Fraction` representing the exact
|
||||
|
|
|
@ -216,6 +216,14 @@ class Fraction(numbers.Rational):
|
|||
(cls.__name__, dec, type(dec).__name__))
|
||||
return cls(*dec.as_integer_ratio())
|
||||
|
||||
def as_integer_ratio(self):
|
||||
"""Return the integer ratio as a tuple.
|
||||
|
||||
Return a tuple of two integers, whose ratio is equal to the
|
||||
Fraction and with a positive denominator.
|
||||
"""
|
||||
return (self._numerator, self._denominator)
|
||||
|
||||
def limit_denominator(self, max_denominator=1000000):
|
||||
"""Closest Fraction to self with denominator at most max_denominator.
|
||||
|
||||
|
|
|
@ -302,6 +302,12 @@ class FractionTest(unittest.TestCase):
|
|||
ValueError, "cannot convert NaN to integer ratio",
|
||||
F.from_decimal, Decimal("snan"))
|
||||
|
||||
def test_as_integer_ratio(self):
|
||||
self.assertEqual(F(4, 6).as_integer_ratio(), (2, 3))
|
||||
self.assertEqual(F(-4, 6).as_integer_ratio(), (-2, 3))
|
||||
self.assertEqual(F(4, -6).as_integer_ratio(), (-2, 3))
|
||||
self.assertEqual(F(0, 6).as_integer_ratio(), (0, 1))
|
||||
|
||||
def testLimitDenominator(self):
|
||||
rpi = F('3.1415926535897932')
|
||||
self.assertEqual(rpi.limit_denominator(10000), F(355, 113))
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Add Fraction.as_integer_ratio() to match the corresponding methods in bool,
|
||||
int, float, and decimal.
|
Loading…
Reference in New Issue