mirror of
https://github.com/python/cpython.git
synced 2025-10-10 00:43:41 +00:00
gh-100488: Add is_integer method to fractions.Fraction (#100489)
This commit is contained in:
parent
71159a8e07
commit
e83f88a455
4 changed files with 24 additions and 0 deletions
|
@ -117,6 +117,12 @@ another rational number, or from a string.
|
|||
|
||||
.. versionadded:: 3.8
|
||||
|
||||
.. method:: is_integer()
|
||||
|
||||
Return ``True`` if the Fraction is an integer.
|
||||
|
||||
.. versionadded:: 3.12
|
||||
|
||||
.. classmethod:: from_float(flt)
|
||||
|
||||
Alternative constructor which only accepts instances of
|
||||
|
|
|
@ -225,6 +225,10 @@ class Fraction(numbers.Rational):
|
|||
(cls.__name__, dec, type(dec).__name__))
|
||||
return cls(*dec.as_integer_ratio())
|
||||
|
||||
def is_integer(self):
|
||||
"""Return True if the Fraction is an integer."""
|
||||
return self._denominator == 1
|
||||
|
||||
def as_integer_ratio(self):
|
||||
"""Return the integer ratio as a tuple.
|
||||
|
||||
|
|
|
@ -340,6 +340,19 @@ class FractionTest(unittest.TestCase):
|
|||
ValueError, "cannot convert NaN to integer ratio",
|
||||
F.from_decimal, Decimal("snan"))
|
||||
|
||||
def test_is_integer(self):
|
||||
self.assertTrue(F(1, 1).is_integer())
|
||||
self.assertTrue(F(-1, 1).is_integer())
|
||||
self.assertTrue(F(1, -1).is_integer())
|
||||
self.assertTrue(F(2, 2).is_integer())
|
||||
self.assertTrue(F(-2, 2).is_integer())
|
||||
self.assertTrue(F(2, -2).is_integer())
|
||||
|
||||
self.assertFalse(F(1, 2).is_integer())
|
||||
self.assertFalse(F(-1, 2).is_integer())
|
||||
self.assertFalse(F(1, -2).is_integer())
|
||||
self.assertFalse(F(-1, -2).is_integer())
|
||||
|
||||
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))
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Add :meth:`Fraction.is_integer` to check whether a :class:`fractions.Fraction` is an integer. This improves duck type compatibility with :class:`float` and :class:`int`.
|
Loading…
Add table
Add a link
Reference in a new issue