Устно отформатировать число в Python - PullRequest
7 голосов
/ 01 июля 2010

Как pythonistas печатает число в виде слов, как эквивалент кода Common Lisp:

[3]> (format t "~r" 1e25)
nine septillion, nine hundred and ninety-nine sextillion, nine hundred and ninety-nine quintillion, seven hundred and seventy-eight quadrillion, one hundred and ninety-six trillion, three hundred and eight billion, three hundred and sixty-one million, two hundred and sixteen thousand

Ответы [ 3 ]

7 голосов
/ 01 июля 2010

нет в ядре Python, но есть сторонняя библиотека num2words

>>> from num2words import num2words
>>> num2words(1e25)
'ten septillion, one billion, seventy-three million, seven hundred and forty-one thousand, eight hundred and twenty-four'

>>> num2words(10000000000000000000000000)
'ten septillion'

(обратите внимание, что 1e25 не преобразуется точно в целое число, как в вашем примере)

1 голос
/ 12 декабря 2013

Я только начал работу на турецком языке, это может быть полезно.

https://github.com/guneysus/humanizer-tr

Возвращает список строк и поставляется с простыми функциями тестирования randomizer() prettizer() и основной функцией humanizer()

Он может обрабатывать очень большие числа, потому что он не использует метод деления, но использует сегментацию строк и манипуляции.

Вы можете ввести четное число или строку.

Так как я не написал проверку номера, он может обрабатывать даже не числовой текст :)

>>> humanizer('STACK OVER FLOW')
['STA Trilyon', 'CK  Milyar', 'OVE Milyon', 'R F Bin', 'LOW']
0 голосов
/ 12 февраля 2019

Вот как это сделать:

def abbreviate(x):
    abbreviations = ["", "K", "M", "B", "T", "Qd", "Qn", "Sx", "Sp", "O", "N", 
    "De", "Ud", "DD"]
    thing = "1"
    a = 0
    while len(thing) < len(str(x)) - 3:
        thing += "000"
        a += 1
    b = int(thing)
    thing = round(x / b, 2)
    return str(thing) + " " + abbreviations[a]

Это делает это:

>>> abbreviate(11423)
11.43 K
...