diff --git a/django/utils/numberformat.py b/django/utils/numberformat.py index f621ff64b4..c064ce6918 100644 --- a/django/utils/numberformat.py +++ b/django/utils/numberformat.py @@ -48,6 +48,9 @@ def format( if abs(number) < cutoff: number = Decimal("0") + if not number.is_finite(): + return str(number) + # Format values with more than 200 digits (an arbitrary cutoff) using # scientific notation to avoid high memory usage in {:f}'.format(). _, digits, exponent = number.as_tuple() diff --git a/tests/humanize_tests/tests.py b/tests/humanize_tests/tests.py index b9f1e58ef7..7c2863d3c4 100644 --- a/tests/humanize_tests/tests.py +++ b/tests/humanize_tests/tests.py @@ -153,6 +153,9 @@ class HumanizeTests(SimpleTestCase): "-1234567.1234567", Decimal("1234567.1234567"), Decimal("-1234567.1234567"), + Decimal("Infinity"), + Decimal("-Infinity"), + Decimal("NaN"), None, "1234567", "-1234567", @@ -193,6 +196,9 @@ class HumanizeTests(SimpleTestCase): "-1,234,567.1234567", "1,234,567.1234567", "-1,234,567.1234567", + "Infinity", + "-Infinity", + "NaN", None, "1,234,567", "-1,234,567",