2016-05-09 6 views
1

У меня есть номер: 100 Я показываю здесь как это. Но когда я пытаюсь показать число в 1000, то нужно отобразить 1000. & так далее нравится 1,00,000 аналогичным образом.Python: Как преобразовать число, которое разделяется запятой, когда число увеличивается?

Ниже структуры

Количество отформатированы как

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

Все перечисленные выше вещи, которые я хочу сделать в python.

Я думал об использовании регулярного выражения, но не смог найти способ продолжения.

У кого-нибудь есть идея?

+3

@DonkeyKong: Это не точно тысячи разделителей. – AKS

+0

Итак, вы хотите, чтобы самая правая группа цифр, разделенная запятой, имела ширину 3, а все остальные - две цифры в ширину? –

+0

@AKS Упс, приятно поймать. Я просто предположил, что никогда не видел номеров, разделенных, как предусмотрено. – miradulo

ответ

4

Я признаю этот способ разделения чисел, как тот, который используется в Индии. Так что я думаю, что вы можете получить то, что вы хотите с помощью locale:

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

Точная локаль использовать может отличаться в вашей системе; попробуйте locale -a | grep IN, чтобы получить список индейских локалей, которые вы установили.

+0

Я пробовал использовать: ** locale.setlocale (locale.LC_NUMERIC, '') **. Работала хорошо для меня. – danny

+0

@danny: Да, на вашем компьютере используется стандартная локаль, что может быть и так, потому что вы, вероятно, делаете это, чтобы соответствовать вашим региональным настройкам. Люди, которые запускают ваш код в системах, настроенных для других стран, нуждаются в явном имени локали, если они хотят напечатать в стиле «lakh». –

2

Обновлено: Этот код теперь поддерживает номера int и !

Вы можете написать небольшую строку номер-к-превращающего функционировать самостоятельно, как этот:

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) 

Это простой в использовании:

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

Приведенный выше пример может привести к этой выход:

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

Обновлен фрагмент кода для поддержки десятичных чисел с плавающей запятой. –