如何将数字格式化为字符串,以使其前面有多个空格?我希望较短的数字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'
答案 0 :(得分:8)
答案 1 :(得分:2)
您可以使用%*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)
答案 2 :(得分:2)
'%* s /%s'%(len(str(a)),b,a)
答案 3 :(得分:1)
请参阅String Formatting Operations:
s = '%5i' % (5,)
您仍然需要通过包含最大长度来动态构建格式字符串:
fmt = '%%%ii' % (len('52500'),)
s = fmt % (5,)
答案 4 :(得分:0)
不确定你到底发生了什么,但看起来很接近:
>>> 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'