Skip to content

Commit 984526c

Browse files
authored
Fix intcomma overflow for large Python integers (#392)
1 parent 14965a7 commit 984526c

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

‎src/humanize/number.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def intcomma(value: NumberOrString, ndigits: int | None = None) -> str:
160160
value = float(value)
161161
else:
162162
value = int(value)
163-
else:
163+
elif not isinstance(value, int):
164164
if not math.isfinite(float(value)):
165165
return _format_not_finite(float(value))
166166
float(value)

‎tests/test_number.py‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,13 @@ def test_intcomma(
8383
assert humanize.intcomma(*test_args) == expected
8484

8585

86+
@pytest.mark.parametrize("sign", [1, -1])
87+
def test_intcomma_large_integer(sign: int) -> None:
88+
value = sign * (10**400 + 123)
89+
expected = ("-" if sign < 0 else "") + "10" + ",000" * 132 + ",123"
90+
assert humanize.intcomma(value) == expected
91+
92+
8693
def test_intword_powers() -> None:
8794
# make sure that powers & human_powers have the same number of items
8895
assert len(number.powers) == len(number.human_powers)

0 commit comments

Comments
 (0)