From 9326b16b01cce8a6fbad68b94cede4c31c19516c Mon Sep 17 00:00:00 2001 From: Zo Bot Date: Wed, 1 Jul 2026 01:55:12 +0000 Subject: [PATCH] ordinal: use abs(value) for suffix so negative integers get the right -st, -nd, -rd, -th --- src/humanize/number.py | 3 ++- tests/test_number.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/humanize/number.py b/src/humanize/number.py index 2fb22c6..593b408 100644 --- a/src/humanize/number.py +++ b/src/humanize/number.py @@ -109,7 +109,8 @@ def ordinal(value: NumberOrString, gender: str = "male") -> str: except (TypeError, ValueError): return str(value) gender = "male" if gender == "male" else "female" - digit = 0 if value % 100 in (11, 12, 13) else value % 10 + abs_value = abs(value) + digit = 0 if abs_value % 100 in (11, 12, 13) else abs_value % 10 return f"{value}{P_(f'{digit} ({gender})', _ORDINAL_SUFFIXES[digit])}" diff --git a/tests/test_number.py b/tests/test_number.py index 78639c3..204d172 100644 --- a/tests/test_number.py +++ b/tests/test_number.py @@ -25,6 +25,16 @@ ("102", "102nd"), ("103", "103rd"), ("111", "111th"), + (-1, "-1st"), + (-2, "-2nd"), + (-3, "-3rd"), + (-4, "-4th"), + (-11, "-11th"), + (-12, "-12th"), + (-13, "-13th"), + (-21, "-21st"), + (-101, "-101st"), + (-111, "-111th"), ("something else", "something else"), (None, "None"), (math.nan, "NaN"),