Modules to convert numbers to words in multiple languages with support for 50+ locales.
—
Core functionality for converting numbers to word representations in multiple languages and formats. The main num2words() function provides a unified interface for all conversion types across all supported languages.
Convert integers and floats to their word representation (e.g., 42 → "forty-two").
def num2words(number, lang='en', to='cardinal', **kwargs):
"""
Convert number to cardinal word form.
Parameters:
- number: int/float/str - Number to convert
- lang: str - Language code (default: 'en')
- to: str - Must be 'cardinal' for this conversion type
- **kwargs: Language-specific formatting options
Returns:
str - Cardinal number as words
Raises:
NotImplementedError - For unsupported languages
TypeError - For invalid number types
OverflowError - For numbers exceeding language limits
"""Usage Examples:
from num2words import num2words
# Basic integers
num2words(42) # "forty-two"
num2words(1000) # "one thousand"
num2words(1234567) # "one million, two hundred and thirty-four thousand, five hundred and sixty-seven"
# Negative numbers
num2words(-15) # "minus fifteen"
# Decimal numbers
num2words(42.5) # "forty-two point five"
num2words(3.14159) # "three point one four one five nine"
# Different languages
num2words(42, lang='fr') # "quarante-deux"
num2words(42, lang='es') # "cuarenta y dos"
num2words(42, lang='de') # "zweiundvierzig"
num2words(42, lang='ja') # "四十二"Convert numbers to ordinal word form (e.g., 42 → "forty-second").
def num2words(number, lang='en', to='ordinal', **kwargs):
"""
Convert number to ordinal word form.
Parameters:
- number: int - Integer to convert (floats not supported)
- lang: str - Language code (default: 'en')
- to: str - Must be 'ordinal' for this conversion type
- **kwargs: Language-specific formatting options
Returns:
str - Ordinal number as words
Raises:
NotImplementedError - For unsupported languages
TypeError - For float inputs or negative numbers
"""Usage Examples:
# Basic ordinals
num2words(1, to='ordinal') # "first"
num2words(2, to='ordinal') # "second"
num2words(3, to='ordinal') # "third"
num2words(21, to='ordinal') # "twenty-first"
num2words(42, to='ordinal') # "forty-second"
# Different languages
num2words(1, to='ordinal', lang='fr') # "premier"
num2words(2, to='ordinal', lang='es') # "segundo"
# Backward compatibility (deprecated)
num2words(42, ordinal=True) # "forty-second" (equivalent to to='ordinal')Convert numbers to ordinal numeric form (e.g., 42 → "42nd").
def num2words(number, lang='en', to='ordinal_num', **kwargs):
"""
Convert number to ordinal numeric form.
Parameters:
- number: int - Integer to convert
- lang: str - Language code (default: 'en')
- to: str - Must be 'ordinal_num' for this conversion type
- **kwargs: Language-specific formatting options
Returns:
str - Ordinal number in numeric format with suffix
"""Usage Examples:
num2words(1, to='ordinal_num') # "1st"
num2words(2, to='ordinal_num') # "2nd"
num2words(3, to='ordinal_num') # "3rd"
num2words(4, to='ordinal_num') # "4th"
num2words(21, to='ordinal_num') # "21st"
num2words(42, to='ordinal_num') # "42nd"Convert numbers to year word form with language-specific formatting.
def num2words(number, lang='en', to='year', **kwargs):
"""
Convert number to year word form.
Parameters:
- number: int - Year to convert (typically 4-digit)
- lang: str - Language code (default: 'en')
- to: str - Must be 'year' for this conversion type
- **kwargs: Language-specific year formatting options
Returns:
str - Year as words in language-specific format
"""Usage Examples:
num2words(1984, to='year') # "nineteen eighty-four"
num2words(2000, to='year') # "two thousand"
num2words(2023, to='year') # "twenty twenty-three"
num2words(1066, to='year') # "ten sixty-six"
# Different languages may have different year formatting
num2words(1984, to='year', lang='fr') # Language-specific year formatThe function accepts string inputs and converts them to numbers first.
def num2words(number, **kwargs):
"""
Handle string inputs by converting to number first.
Parameters:
- number: str - String representation of number
- **kwargs: Same as numeric inputs
Returns:
str - Converted number as words
Raises:
ValueError - For invalid string formats
"""Usage Examples:
num2words("42") # "forty-two"
num2words("42.5") # "forty-two point five"
num2words("1,234") # Handles comma-separated format
num2words("-15") # "minus fifteen"The library provides intelligent language fallback for regional variants.
Usage Examples:
# Full language codes
num2words(42, lang='en_US') # Falls back to 'en'
num2words(42, lang='fr_FR') # Falls back to 'fr'
num2words(42, lang='es_MX') # Falls back to 'es'
# Specific regional variants (where supported)
num2words(42, lang='en_IN') # English (India) - specific formatting
num2words(42, lang='fr_BE') # French (Belgium) - specific formatting
num2words(42, lang='es_CO') # Spanish (Colombia) - specific formatting
# Error handling for unsupported languages
try:
num2words(42, lang='unsupported')
except NotImplementedError:
# Fallback to default language
result = num2words(42, lang='en')The conversion function provides clear error messages for various edge cases:
# Type errors
try:
num2words(42.5, to='ordinal') # Floats not supported for ordinals
except TypeError as e:
print(e) # "Cannot treat float 42.5 as ordinal."
# Negative ordinals
try:
num2words(-5, to='ordinal')
except TypeError as e:
print(e) # "Cannot treat negative num -5 as ordinal."
# Numbers too large
try:
num2words(10**100) # Exceeds maximum supported value
except OverflowError as e:
print(e) # Language-specific maximum value message
# Unsupported languages
try:
num2words(42, lang='xyz')
except NotImplementedError:
print("Language not supported")Install with Tessl CLI
npx tessl i tessl/pypi-num2words