Duplicata possible:
Comment imprimer un nombre avec des virgules comme séparateurs de milliers?
Par exemple:
>> print numberFormat(1234)
>> 1,234
Ou existe-t-il une fonction intégrée dans Python qui fait cela?
Personne n'a jusqu'à présent mentionné la nouvelle option ','
Qui a été ajoutée dans la version 2.7 au Format Specification Mini-Language - voir PEP 378: Format Specifier for Séparateur de milliers dans le Quoi de neuf dans Python 2.7 . Il est facile à utiliser car vous n'avez pas besoin de jouer avec locale
(mais est limité pour l'internationalisation à cause de cela, voir le PEP 378 original ). Il fonctionne avec les flottants, les nombres entiers et les décimales - et toutes les autres fonctionnalités de formatage prévues dans les spécifications du mini-langage.
Exemple d'utilisation:
print format(1234, ",d") # -> 1,234
print "{:,d}".format(1234) # -> 1,234
Remarque: Bien que cette nouvelle fonctionnalité soit vraiment pratique, elle est en fait pas d'autant plus difficile d'utiliser le locale
module, comme plusieurs autres l'ont suggéré. L'avantage est que la sortie numérique peut être effectuée pour suivre automatiquement les conventions de séparateur de milliers (et autres) appropriées utilisées dans divers pays lors de la sortie de choses comme les nombres, les dates et les heures. Il est également très facile de mettre en œuvre les paramètres par défaut de votre ordinateur sans apprendre un tas de codes de langue et de pays. Il vous suffit de:
import locale
locale.setlocale(locale.LC_ALL, '') # empty string for platform's default settings
Après cela, vous pouvez simplement utiliser le code de type générique 'n'
Pour la sortie des nombres (à la fois entier et flottant). Où je suis, les virgules sont utilisées comme séparateur de milliers, donc après avoir défini les paramètres régionaux comme indiqué ci-dessus, voici ce qui se passerait:
print format(1234, "n") # -> 1,234
print "{:n}".format(1234) # -> 1,234
Une grande partie du reste du monde utilise des périodes au lieu de virgules à cet effet, donc la définition des paramètres régionaux par défaut dans de nombreux emplacements (ou la spécification explicite du code d'une telle région dans un appel setlocale()
) produit ce qui suit:
print format(1234, "n") # -> 1.234
print "{:n}".format(1234) # -> 1.234
La sortie basée sur le spécificateur de type de formatage 'd'
Ou ',d'
N'est pas affectée par l'utilisation (ou la non-utilisation) de setlocale()
. Cependant, le spécificateur 'd'
est affecté si vous utilisez à la place locale.format()
ou locale.format_string()
fonctions.
N'oubliez pas de définir d'abord les paramètres régionaux de manière appropriée.
Dépouillé de webpyutils.py
:
def commify(n):
"""
Add commas to an integer `n`.
>>> commify(1)
'1'
>>> commify(123)
'123'
>>> commify(1234)
'1,234'
>>> commify(1234567890)
'1,234,567,890'
>>> commify(123.0)
'123.0'
>>> commify(1234.5)
'1,234.5'
>>> commify(1234.56789)
'1,234.56789'
>>> commify('%.2f' % 1234.5)
'1,234.50'
>>> commify(None)
>>>
"""
if n is None: return None
n = str(n)
if '.' in n:
dollars, cents = n.split('.')
else:
dollars, cents = n, None
r = []
for i, c in enumerate(str(dollars)[::-1]):
if i and (not (i % 3)):
r.insert(0, ',')
r.insert(0, c)
out = ''.join(r)
if cents:
out += '.' + cents
return out
Il existe d'autres solutions ici .
Utilisez locale.format()
sur l'entier, mais méfiez-vous des paramètres régionaux actuels de votre environnement. Certains environnements peuvent ne pas avoir cet ensemble ou être défini sur quelque chose qui ne vous donnera pas un résultat conforme.
Voici un code que j'ai dû écrire pour résoudre ce problème exact. Il définira automatiquement les paramètres régionaux pour vous en fonction de votre plate-forme:
try:
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') #use locale.format for commafication
except locale.Error:
locale.setlocale(locale.LC_ALL, '') #set to default locale (works on windows)
score = locale.format('%d', player['score'], True)