2016-05-09 1 views
1

J'ai un certain nombre comme: 100 Je montre ici comme elle. Mais lorsque j'essaie d'afficher un nombre de 1000, je veux afficher 1000. & ainsi comme 1,00,000 de même.Python: Comment convertir un nombre qui est séparé par une virgule lorsque le nombre de chiffres augmente?

ci-dessous la structure

Nombre formaté comme

1000 1.000

10000 10.000

100000 1,00,000

1000000 10,00,000

10000000 1,00,00,000

100000000 10,00,00,000

1000000000 1,00,00,00,000

10000000000 10,00,00,00,000

Toutes les choses ci-dessus que je veux faire en python.

Je pensais que l'utilisation regex mais n'a pas pu obtenir de façon la façon de procéder.

Toute personne ayant une idée?

+3

@DonkeyKong: Ce ne sont pas exactement mille séparateurs. – AKS

+0

Vous voulez donc que le groupe de chiffres séparés par des virgules le plus à droite ait la largeur 3 et que tous les autres aient deux chiffres de largeur? –

+0

@AKS Oops, belle prise. J'ai juste supposé, je n'ai jamais vu les nombres séparés comme prévu. – miradulo

Répondre

4

Je reconnais cette façon de séparer les numéros que celui utilisé en Inde. Donc, je pense que vous pouvez obtenir ce que vous voulez à l'aide locale:

import locale 
locale.setlocale(locale.LC_NUMERIC, 'hi_IN') 
locale.format("%d", 10000000000, grouping=True) 

Les paramètres régionaux exact à utiliser peut être différent sur votre système; essayez locale -a | grep IN pour obtenir une liste des paramètres régionaux indiens que vous avez installés.

+0

J'ai essayé en utilisant comme: ** locale.setlocale (locale.LC_NUMERIC, '') **. Ça a bien marché pour moi. – danny

+0

@danny: Oui, c'est en utilisant les paramètres régionaux par défaut sur votre machine, ce qui peut être bien puisque vous faites probablement cela pour correspondre à vos propres paramètres régionaux. Les personnes qui exécutent votre code sur des systèmes configurés pour d'autres pays auraient besoin d'un nom de lieu explicite si elles veulent imprimer le style "lakh". –

2

Mis à jour: Ce code prend désormais en charge les numéros int et float!

Vous pouvez écrire un petit nombre à cordes conversion vous-même fonctionner, comme celui-ci:

def special_format(n): 
    s, *d = str(n).partition(".") 
    r = ",".join([s[x-2:x] for x in range(-3, -len(s), -2)][::-1] + [s[-3:]]) 
    return "".join([r] + d) 

Il est simple à utiliser:

print(special_format(1)) 
print(special_format(12)) 
print(special_format(123)) 
print(special_format(1234)) 
print(special_format(12345)) 
print(special_format(123456)) 
print(special_format(123456789)) 
print(special_format(1.0)) 
print(special_format(12.34)) 
print(special_format(1234567890.1234567890)) 

L'exemple ci-dessus se traduirait par cette sortie:

1 
12 
123 
1,234 
12,345 
1,23,456 
1,23,45,67,89,01,23,45,67,890 
1.0 
12.34 
1,23,45,67,890.1234567 

See this code running on ideone.com

+0

J'ai mis à jour mon extrait de code pour prendre également en charge les nombres décimaux flottants. –