Skip to content

Commit e83f88a

Browse files
authored
gh-100488: Add is_integer method to fractions.Fraction (#100489)
1 parent 71159a8 commit e83f88a

File tree

4 files changed

+24
-0
lines changed

4 files changed

+24
-0
lines changed

Doc/library/fractions.rst

+6
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,12 @@ another rational number, or from a string.
117117

118118
.. versionadded:: 3.8
119119

120+
.. method:: is_integer()
121+
122+
Return ``True`` if the Fraction is an integer.
123+
124+
.. versionadded:: 3.12
125+
120126
.. classmethod:: from_float(flt)
121127

122128
Alternative constructor which only accepts instances of

Lib/fractions.py

+4
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,10 @@ def from_decimal(cls, dec):
225225
(cls.__name__, dec, type(dec).__name__))
226226
return cls(*dec.as_integer_ratio())
227227

228+
def is_integer(self):
229+
"""Return True if the Fraction is an integer."""
230+
return self._denominator == 1
231+
228232
def as_integer_ratio(self):
229233
"""Return the integer ratio as a tuple.
230234

Lib/test/test_fractions.py

+13
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,19 @@ def testFromDecimal(self):
340340
ValueError, "cannot convert NaN to integer ratio",
341341
F.from_decimal, Decimal("snan"))
342342

343+
def test_is_integer(self):
344+
self.assertTrue(F(1, 1).is_integer())
345+
self.assertTrue(F(-1, 1).is_integer())
346+
self.assertTrue(F(1, -1).is_integer())
347+
self.assertTrue(F(2, 2).is_integer())
348+
self.assertTrue(F(-2, 2).is_integer())
349+
self.assertTrue(F(2, -2).is_integer())
350+
351+
self.assertFalse(F(1, 2).is_integer())
352+
self.assertFalse(F(-1, 2).is_integer())
353+
self.assertFalse(F(1, -2).is_integer())
354+
self.assertFalse(F(-1, -2).is_integer())
355+
343356
def test_as_integer_ratio(self):
344357
self.assertEqual(F(4, 6).as_integer_ratio(), (2, 3))
345358
self.assertEqual(F(-4, 6).as_integer_ratio(), (-2, 3))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
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`.

0 commit comments

Comments
 (0)