Agus Makmun

I'm Programmer for Python & Django. I've made quite a few web apps, especially on Django.

Python numberize until undefined or infinity numbers

02 May 2020 » python

Something we need to create the function to convert the number into string number with fast method, for example: 1000 to 1.0 k, 1000000 to 1.0 m, etc.

def numberize(number):
    scales = {
        1000: 'k',
        1000000: 'm',
        1000000000: 'b',
        1000000000000: 't',
        1000000000000000: 'quad',
        1000000000000000000: 'quin',
        1000000000000000000000: 'sexti',
        1000000000000000000000000: 'septi',
        1000000000000000000000000000: 'octi',
        1000000000000000000000000000000: 'noni',
        1000000000000000000000000000000000: 'deci',
        1000000000000000000000000000000000000: 'undeci',
        1000000000000000000000000000000000000000: 'duodeci',
        1000000000000000000000000000000000000000000: 'trede',
        1000000000000000000000000000000000000000000000: 'quattu',
        1000000000000000000000000000000000000000000000000: 'quindeci',
        1000000000000000000000000000000000000000000000000000: 'sexdeci',
        1000000000000000000000000000000000000000000000000000000: 'septend',
        1000000000000000000000000000000000000000000000000000000000: 'octodeci',
        1000000000000000000000000000000000000000000000000000000000000: 'novemdeci',
        1000000000000000000000000000000000000000000000000000000000000000: 'vigintillion',
        1000000000000000000000000000000000000000000000000000000000000000000: 'infinity'
    }
    number = int(number)
    for digit, name in scales.items():
        minimum = '9' * len(str(digit)[1:])
        maximum = minimum + '999'

        if number > max(scales):
            return "{0:.1f} ".format(number / max(scales)) + name

        elif number > int(minimum) and number <= int(maximum):
            return "{0:.1f} ".format(number / digit) + name
    return number

Usage example;

>>> numberize(1000)
1.0 k
>>> numberize(1000000)
1.0 m
>>> numberize(100120009319931)
100.1 t