mirror of
https://github.com/python/cpython.git
synced 2025-08-22 17:55:18 +00:00
bpo-32968: Make modulo and floor division involving Fraction and float consistent with other operations (#5956)
Make mixed-type `%` and `//` operations involving `Fraction` and `float` objects behave like all other mixed-type arithmetic operations: first the `Fraction` object is converted to a `float`, then the `float` operation is performed as normal. This fixes some surprising corner cases, like `Fraction('1/3') % inf` giving a NaN. Thanks Elias Zamaria for the patch.
This commit is contained in:
parent
74734f73ca
commit
393f1ff62e
4 changed files with 13 additions and 12 deletions
|
@ -427,23 +427,18 @@ class Fraction(numbers.Rational):
|
|||
|
||||
__truediv__, __rtruediv__ = _operator_fallbacks(_div, operator.truediv)
|
||||
|
||||
def __floordiv__(a, b):
|
||||
def _floordiv(a, b):
|
||||
"""a // b"""
|
||||
return math.floor(a / b)
|
||||
|
||||
def __rfloordiv__(b, a):
|
||||
"""a // b"""
|
||||
return math.floor(a / b)
|
||||
__floordiv__, __rfloordiv__ = _operator_fallbacks(_floordiv, operator.floordiv)
|
||||
|
||||
def __mod__(a, b):
|
||||
def _mod(a, b):
|
||||
"""a % b"""
|
||||
div = a // b
|
||||
return a - b * div
|
||||
|
||||
def __rmod__(b, a):
|
||||
"""a % b"""
|
||||
div = a // b
|
||||
return a - b * div
|
||||
__mod__, __rmod__ = _operator_fallbacks(_mod, operator.mod)
|
||||
|
||||
def __pow__(a, b):
|
||||
"""a ** b
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue