Skip to content

Commit

Permalink
bpo-37819: Add Fraction.as_integer_ratio() (pythonGH-15212)
Browse files Browse the repository at this point in the history
  • Loading branch information
rhettinger authored and DinoV committed Jan 14, 2020
1 parent 8c00e9e commit 476a8a4
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 0 deletions.
7 changes: 7 additions & 0 deletions Doc/library/fractions.rst
Expand Up @@ -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
Expand Down
8 changes: 8 additions & 0 deletions Lib/fractions.py
Expand Up @@ -216,6 +216,14 @@ def from_decimal(cls, dec):
(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.
Expand Down
6 changes: 6 additions & 0 deletions Lib/test/test_fractions.py
Expand Up @@ -302,6 +302,12 @@ def testFromDecimal(self):
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))
Expand Down
@@ -0,0 +1,2 @@
Add Fraction.as_integer_ratio() to match the corresponding methods in bool,
int, float, and decimal.

0 comments on commit 476a8a4

Please sign in to comment.