2010-07-01 14 views
7

Jak pythonistas wydrukować numer co słowy, jak równowartość wspólnego kodu Lisp:wysławianiu formatować liczby w Pythonie

[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 

Odpowiedz

7

nie w rdzeniu Pythona, ale jest tam biblioteka 3rd party 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' 

(zauważ, że 1e25 nie jest dokładnie konwertowany na liczbę całkowitą, ani w twoim przykładzie)

+0

Excellent - (? C) I rzeczywiście zauważyłem, że, ale to błąd, w jaki sposób Pythona obsługuje wykładniczy wyrażenie: 'int (1e25)' tworzy '10000000000000000905969664L' i' 1 * 10 ** 25' produkuje '10000000000000000000000000L'. Dziwne? –

+2

Nic dziwnego. '1e25' to" ustaw wartość zmiennoprzecinkową najbliższą 10^25 ", a' 1 * 10 ** 25' mówi "pomnóż 1 przez wynik pomnożenia 10 przez siebie 25 razy". Arytmetyka zmiennoprzecinkowa o stałej szerokości (na komputerze) nie jest matematycznie dokładna, natomiast liczby całkowite w ostatnich wersjach Pythona są arbitralną precyzją. – Ken

+2

1e25 nie jest "wyrażeniem wykładniczym", jest literałem zmiennoprzecinkowym. A liczba zmiennoprzecinkowa w pythonie nie może dokładnie wynosić 10 ** 25 (i nie powinno to być tak dużym zaskoczeniem, biorąc pod uwagę, że 2 ** 84> 10 ** 25> 2 ** 83). – 6502

1

Właśnie rozpocząłem pracę w języku tureckim, może być pomocne.

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

powrót do listy ciągów, a pochodzi z prostych funkcji testowych randomizer()prettizer() i funkcji rdzenia humanizer()

Może obsługiwać bardzo duże ilości, ponieważ nie używać podzielenie podejście, ale używa ciąg segmentacja i manipulacja.

Możesz wpisać parzystą liczbę lub ciąg.

ponieważ nie pisać weryfikację numeru może nawet obsługiwać non numer tekst :)

>>> humanizer('STACK OVER FLOW') 
['STA Trilyon', 'CK Milyar', 'OVE Milyon', 'R F Bin', 'LOW'] 
Powiązane problemy