web-dev-qa-db-fra.com

Quelle est la façon la plus simple d'ajouter des virgules à un entier?

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?

35
ensnare

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.

95
martineau

locale.format()

N'oubliez pas de définir d'abord les paramètres régionaux de manière appropriée.

13

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 .

10
systempuntoout

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)
4
Aphex