2015-03-09 1 views
-2

Я хотел бы добавить запятые, чтобы «разделить тысячи», когда печатаются длинные целые числа. Уловка, я не хочу преобразовать int в строку. Есть несколько вопросов, так чтобы предложить что-то вроде:Есть ли способ форматировать число с запятыми для тысяч, не преобразовывая int в строку?

a = 1234567 
print "The number is %s but it's converted to a string" %'{:,d}'.format(a) 

====> Номер является 1342424242, но он преобразуется в строку

Я искал решение, которое не было бы потребовать преобразование в строку. Например, когда я хотел, чтобы отобразить число в процентах:

b = 0.1234 
print "The Norwegian Blue prefers kippin' on it's back! %0.2f%%" % (b*100) 

====> Норвежский голубой предпочитает kippin' на это обратно! 12.34%

В любом случае, чтобы сделать что-то подобное, только с разделением запятых? Спасибо!

EDIT: Чтобы лучше объяснить себя, я имею в виду представить число с запятыми, подобно тому, как вы представляете процент с меткой% и только 2 десятичным знаками после точки. Вы не изменяете число или не преобразуете его в строку, а только обрабатываете способ отображения/представления. Это то, чего я пытаюсь достичь.

EDIT2: Здесь я не понимаю негативное настроение. Я дал один способ кое-что обсудить и спросил, можно ли это сделать по-другому, это будет больше похоже на пример, который я дал. Я подошел к обоим этим примерам после того, как нашел SO довольно немного. Может быть, вопрос о нобе, но, по крайней мере, я пошел в одиночку и искал решения, прежде чем обратиться к сообществу. Не уверен, что я сделал не так, как не знал ответов. Tnx для чтения.

+1

Ну, это невозможно, поскольку целое число, разделенное запятыми, будет рассматриваться как объект кортежа. –

+0

«Мойте меня, но не делайте меня мокрым» - вы не можете иметь одно без другого. он форматирует описание способа преобразования числа в строку. – glglgl

+0

Вы хотите добавить запятые ... и сохранить тип как 'int'? – HavelTheGreat

ответ

6

Ваш собственный пример способен делать то, что вы хотите. Просто напишите его правильно, не смешивая стили формата:

a = 1234567 
print "The number is {:,d} but it's converted to a string".format(a) 

Это хорошая причина использовать современный синтаксис. Это не волнует тип аргумента. Он будет использовать str на объекте и выводит его соответствующим образом.

print "The number is {:,d} and John has {} sisters and {} brothers".format(1000000, 2, 3) 
+0

@tdelaney Спасибо, только что заметил. – RedX

+0

Как это будет работать, если я захочу добавить к печатному выпуску больше чисел? например «Число% d, а у Джона есть% d sisters и% d brothers»% (1000000, 2, 3) - очевидно, нужно отформатировать первый для тысяч. Tnx. – Optimesh

+0

@Optimesh: https://docs.python.org/2/library/string.html#format-examples –

1

Чтобы быть ясно, сама a не изменяется в строку. Существует временная, анонимный строковый объект, созданный '{:,d}'.format(a) и затем подается в "%s" %:

>>> a = 1234567 
>>> "The number is %s but it's converted to a string" %'{:,d}'.format(a) 
"The number is 1,234,567 but it's converted to a string" 
>>> type(a) 
<type 'int'> 
>>> a 
1234567 

Так a сама не изменилась так же, как ваш второй пример не изменяет объект b:

>>> b = 0.1234 
>>> "The Norwegian Blue prefers kippin' on it's back! %0.2f%%" % (b*100) 
"The Norwegian Blue prefers kippin' on it's back! 12.34%" 
>>> type(b) 
<type 'float'> 
>>> b 
0.1234 

Таким образом, базовые значения a и b не меняются. Проблема заключается в том, что для печати a используется синтаксис менее четкого. Просто выполните:

>>> "The number is {:,d} but it's NOT converted to a string".format(a) 
"The number is 1,234,567 but it's NOT converted to a string" 

Нет необходимости делать два шага форматирования, как в вашем примере.

+0

Спасибо за ответ. Я предполагаю, что основная часть моего вопроса связана с путаницей того, что форматирование%, по-видимому, определяется внутри печатного заявления, тогда как во втором случае это делается вне его. – Optimesh