Comment Pythonistas imprimer un nombre en tant que mots, comme l'équivalent du code LISP commun:
[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 Réponses :
Non dans le noyau Python, mais il y a une bibliothèque 3ème partie 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'
Excellent - j'ai remarqué que, mais c'est une erreur dans la façon dont Python (C?) Gère l'expression exponentielle: int (1e25) code> produit
10000000000000000905969664L code> et
1 * 10 ** 25 code> produit
1000000000000000000000000000L code>. Étrange?
Pas étrange du tout. 1e25 code> est "Rendre la valeur du point flottant le plus proche de 10 ^ 25", et
1 * 10 ** 25 code> dit "Multipliez 1 par le résultat de la multiplication de 10 par lui-même 25 fois". L'arithmétique à virgule flottante fixe (sur un ordinateur) n'est pas mathématiquement précise, tandis que les entiers des versions récentes de Python sont une précision arbitraire.
1E25 n'est pas une "expression exponentielle", c'est un littéral à virgule flottante. Et un numéro de point flottant dans Python ne peut pas représenter exactement 10 25 (et cela ne devrait pas être une grande surprise étant donné que 2 b> 84> 10 25> 2 B> 83).
Intéressant et informatif! Sur la base de cette information, j'étais curieux et joué un peu, et si vous voulez une précision, vous pouvez Import Décimal; d = décimal.decimal ('1e25') code> et vous n'obtiendrez pas l'erreur de point flottante.
Je viens de commencer un travail en turc, il peut être utile.
https: // github. com / guneysus / humanizer-tr p>
Il renvoie une liste de chaînes et est livré avec des fonctions de test faciles Il peut gérer de très grands nombres car il n'a pas utilisé l'approche de division, mais utilise la segmentation de chaîne et la manipulation. P> Vous pouvez entrer un nombre pair ou une chaîne. P> puisque je n'ai pas écrit de vérification de numéro, il peut même gérer un texte non numérique.
:) p> randomizer () code>
prettizer () code > et la fonction principale
humaniseur () code> p>
ici comme un moyen de le faire:
>>> abbreviate(11423) 11.43 K
Cela ne répond pas à la question et la question est de près de neuf ans!