Comment formater 1000000
à 1.000.000
en Python? où le '.' est le séparateur de milliers de marques décimales.
Si vous souhaitez ajouter un séparateur de milliers, vous pouvez écrire:
>>> '{0:,}'.format(1000000)
'1,000,000'
Mais cela ne fonctionne que dans Python 2.7 et supérieur.
Voir syntaxe de chaîne de format .
Dans les anciennes versions, vous pouvez utiliser locale.format () :
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'en_AU.utf8'
>>> locale.format('%d', 1000000, 1)
'1,000,000'
l'avantage supplémentaire d'utiliser locale.format()
est qu'il utilisera le séparateur de milliers de votre locale, par exemple.
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'de_DE.utf-8')
'de_DE.utf-8'
>>> locale.format('%d', 1000000, 1)
'1.000.000'
Je ne l'ai pas vraiment compris; mais voici ce que je comprends:
Vous voulez convertir 1123000 en 1.123.000. Vous pouvez le faire en utilisant le format:
Exemple:
>>> format(1123000,',d')
'1,123,000'
J'étends juste un peu la réponse ici :)
J'avais besoin d'un séparateur du millième et de la précision d'un nombre à virgule flottante.
Ceci peut être réalisé en utilisant la chaîne de format suivante:
> my_float = 123456789.123456789
> "{:0,.2f}".format(my_float)
'123,456,789.12'
Ceci décrit le mini-langage du format()
- specifier:
[[fill]align][sign][#][0][width][,][.precision][type]
Source: https://www.python.org/dev/peps/pep-0378/#current-version-of-the-mini-language
Une idée
def itanum(x):
return format(x,',d').replace(",",".")
>>> itanum(1000)
'1.000'
S'appuyant sur la réponse de Mikel, j'ai implémenté sa solution comme celle-ci dans mon graphique matplotlib. J'ai pensé que certains pourraient trouver cela utile:
ax=plt.gca()
ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, loc: locale.format('%d', x, 1)))
Utiliser itertools
peut vous donner plus de flexibilité:
>>> from itertools import Zip_longest
>>> num = "1000000"
>>> sep = "."
>>> places = 3
>>> args = [iter(num[::-1])] * places
>>> sep.join("".join(x) for x in Zip_longest(*args, fillvalue=""))[::-1]
'1.000.000'
Voici seulement une réponse alternative . Vous pouvez utiliser l'opérateur split en python et à travers une logique étrange Voici le code
i=1234567890
s=str(i)
str1=""
s1=[Elm for Elm in s]
if len(s1)%3==0:
for i in range(0,len(s1)-3,3):
str1+=s1[i]+s1[i+1]+s1[i+2]+"."
str1+=s1[i]+s1[i+1]+s1[i+2]
else:
rem=len(s1)%3
for i in range(rem):
str1+=s1[i]
for i in range(rem,len(s1)-1,3):
str1+="."+s1[i]+s1[i+1]+s1[i+2]
print str1
Sortie
1.234.567.890
Étrange que personne n'ait mentionné une solution simple avec regex:
import re
print(re.sub(r'(?<!^)(?=(\d{3})+$)', r'.', "12345673456456456"))
Donne le résultat suivant:
12.345.673.456.456.456
Cela fonctionne aussi si vous voulez séparer les chiffres avant la virgule:
re.sub(r'(?<!^)(?=(\d{3})+,)', r'.', "123456734,56456456")
donne:
123.456.734,56456456
l'expression régulière utilise lookahead pour vérifier que le nombre de chiffres après une position donnée est divisible par 3.