diff --git a/babel/numbers.py b/babel/numbers.py index c4b3c5d06..fbc7eece9 100644 --- a/babel/numbers.py +++ b/babel/numbers.py @@ -690,6 +690,8 @@ def _get_compact_format( plural_form = "other" if number == 1 and "1" in compact_format: plural_form = "1" + if str(magnitude) not in compact_format[plural_form]: + plural_form = "other" # fall back to other as the implicit default format = compact_format[plural_form][str(magnitude)] number = rounded break diff --git a/tests/test_smoke.py b/tests/test_smoke.py index c36151e7e..316979885 100644 --- a/tests/test_smoke.py +++ b/tests/test_smoke.py @@ -17,6 +17,7 @@ 1.2 - 1.0, # Inaccurate float 10, # Plain old integer 0, # Zero + 1000, # A thousand (previously raised KeyError in the nl locale for compact currencies) ) @@ -46,6 +47,8 @@ def test_smoke_numbers(locale): assert numbers.format_decimal(number, locale=locale, numbering_system="default") assert numbers.format_currency(number, "EUR", locale=locale) assert numbers.format_currency(number, "EUR", locale=locale, numbering_system="default") + assert numbers.format_compact_currency(number, "EUR", locale=locale) + assert numbers.format_compact_currency(number, "EUR", locale=locale, numbering_system="default") assert numbers.format_scientific(number, locale=locale) assert numbers.format_scientific(number, locale=locale, numbering_system="default") assert numbers.format_percent(number / 100, locale=locale)