Форматировать число как строку - PullRequest
3 голосов
/ 31 марта 2009

Как вы форматируете число в виде строки, чтобы перед ним было несколько пробелов? Я хочу, чтобы у более короткого числа 5 было достаточно пробелов перед ним, чтобы пробелы плюс 5 имели ту же длину, что и 52500. Приведенная ниже процедура работает, но есть ли встроенный способ сделать это?

a = str(52500)
b = str(5)
lengthDiff = len(a) - len(b)
formatted = '%s/%s' % (' '*lengthDiff + b, a)
# formatted looks like:'     5/52500'

Ответы [ 5 ]

8 голосов
/ 31 марта 2009

Оператор форматирования :

>>> "%10d" % 5
'         5'
>>> 

Используя * spec, длина поля может быть аргументом:

>>> "%*d" % (10,5)
'         5'
>>> 
2 голосов
/ 31 марта 2009

'% * s /% s'% (len (str (a)), b, a)

2 голосов
/ 31 марта 2009

Вы можете просто использовать форматер %*d, чтобы задать ширину. int(math.ceil(math.log(x, 10))) даст вам количество цифр. Модификатор * потребляет число, это число является целым числом, которое означает, сколько пробелов нужно разделить. Таким образом, выполнив '%*d'% (width, num) `вы можете указать ширину и отобразить число без каких-либо дополнительных манипуляций со строками Python.

Вот решение, использующее файл math.log для определения длины номера outof.

import math
num = 5
outof = 52500
formatted = '%*d/%d' % (int(math.ceil(math.log(outof, 10))), num, outof)

Другое решение включает приведение числа outof в виде строки и использование len (), вы можете сделать это, если предпочитаете:

num = 5
outof = 52500
formatted = '%*d/%d' % (len(str(outof)), num, outof)
1 голос
/ 31 марта 2009

См. Операции форматирования строки :

s = '%5i' % (5,)

Вам все еще нужно динамически создать строку форматирования, указав максимальную длину:

fmt = '%%%ii' % (len('52500'),)
s = fmt % (5,)
0 голосов
/ 31 марта 2009

Не уверен, что именно вы ищете, но это выглядит близко:

>>> n = 50
>>> print "%5d" % n
   50

Если вы хотите быть более динамичным, используйте что-то вроде rjust:

>>> big_number = 52500
>>> n = 50
>>> print ("%d" % n).rjust(len(str(52500)))
   50

Или даже:

>>> n = 50
>>> width = str(len(str(52500)))
>>> ('%' + width + 'd') % n
'   50'
...