2009-03-31 4 views
3

숫자를 앞에 여러 개의 공백이 있도록 문자열로 포맷하는 방법은 무엇입니까? 짧은 숫자 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

회원님이 후,하지만이 가까이 보이는 정확히 확인하십시오

>>> 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' 
1

:

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

을 당신은 여전히 ​​동적으로 포함하여 형식 문자열을 구축해야 * 사양을 사용하여

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

가, 필드 길이가 인수 할 수있다 최대 길이 :

fmt = '%%%ii' % (len('52500'),) 
s = fmt % (5,) 
2

너비를주기 위해 %*d 포맷터를 사용할 수 있습니다. int(math.ceil(math.log(x, 10)))는 자릿수를 제공합니다. * 수정자는 숫자를 소비하며, 그 수는 공백으로 사용할 공백의 수를 나타내는 정수입니다. 그래서 '%*d' % (width, num)`을 쓰면 너비를 지정하고 더 이상 파이썬 문자열 조작없이 숫자를 렌더링 할 수 있습니다.

다음은 'outof'번호의 길이를 확인하기 위해 math.log를 사용하는 솔루션입니다.

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

또 다른 해결책은 문자열로 노출되어 내부 단자부 수를 주조하고, 당신이 할 수있는) (렌을 사용하는 것입니다 당신이 선호하는 경우 :

num = 5 
outof = 52500 
formatted = '%*d/%d' % (len(str(outof)), num, outof) 
+0

len (str (x))은 시스템에서 약 두 배 빠릅니다. 너무 쉽게 읽을 수 있습니다 :-) –

+0

그렇습니다.하지만 방정식의 어느 쪽이 길다는 것을 알고 있다고 가정합니다. –

+0

math.ceil (math.log (x, 10))은 10의 제곱에 대해 잘못된 결과를 제공합니다. –

2

'%를 * S/% S'% (LEN (str (a)), b, a)

관련 문제