CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-num2words

Modules to convert numbers to words in multiple languages with support for 50+ locales.

Pending
Overview
Eval results
Files

number-conversion.mddocs/

Number Conversion

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.

Capabilities

Cardinal Numbers

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')         # "四十二"

Ordinal Numbers

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')

Ordinal Numbers (Numeric)

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"

Year Format

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 format

String Input Handling

The 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"

Language Fallback

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')

Error Handling

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

docs

base-converter.md

currency-conversion.md

index.md

language-support.md

number-conversion.md

utility-functions.md

tile.json