파이썬에서 부동 숫자를 고정 너비로 ​​포맷하는 방법


322

다음 요구 사항에 따라 부동 숫자를 고정 너비로 ​​포맷하는 방법은 무엇입니까?

  1. n <1 인 경우 선행 0
  2. 고정 폭을 채우기 위해 후행 십진수 0을 추가하십시오
  3. 고정 폭을 지나서 소수점 이하 자르기
  4. 모든 소수점 정렬

예를 들면 다음과 같습니다.

% formatter something like '{:06}'
numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]

for number in numbers:
    print formatter.format(number)

출력은 다음과 같습니다

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000

답변:


500
for x in numbers:
    print "{:10.4f}".format(x)

인쇄물

   23.2300
    0.1233
    1.0000
    4.2230
 9887.2000

중괄호 안의 형식 지정자는 Python 형식 문자열 구문을 따릅니다 . 특히이 경우 다음과 같은 부분으로 구성됩니다.

  • 콜론 앞 의 빈 문자열 은 "다음에 제공된 인수를 가져옵니다"를 의미합니다 format()–이 경우 x유일한 인수입니다.
  • 10.4f콜론 뒤 의 부분은 형식 지정 입니다.
  • f나타내고 고정 소수점 표현.
  • 10인쇄 공백 lefted 패딩되는 영역의 전체 폭이다.
  • 4소수점 이하의 자리수.

12
그래서 4f는 소수점 이하 자릿수를 4로 제한한다는 것을 이해하지만 10은 무엇을 의미합니까? 이것은 9999999999보다 큰 정수 (이는 9)에서이 형식이 작동하지 않음을 의미합니까? 그냥 궁금해서
hobbes3

55
10.4너비는 10 자이며 소수점 이하 자릿수는 4 자리입니다.
MRAB

13
@ hobbes3 : 10는 최소 필드 너비, 즉 인쇄 된 문자열의 최소 길이입니다. 숫자는 기본적으로 오른쪽으로 정렬되고 공백으로 채워집니다 . 자세한 내용 은 설명서 를 참조하십시오.
Sven Marnach

9
2.7 이전의 파이썬 :("%0.4f" % x).rjust(10)
Steven Rumbalski

22
@StevenRumbalski : 또는 간단히 "%10.4f" % x. Python 2.6에서는을 사용할 수도 있습니다 "{0:10.4f}".format(x).
Sven Marnach

88

이것이 답변 된 지 몇 년이 지났지 만 Python 3.6 ( PEP498 )부터 새로운 것을 사용할 수 있습니다 f-strings.

numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]

for number in numbers:
    print(f'{number:9.4f}')

인쇄물:

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000

2
너비에는 도트 문자도 포함되어 있습니다. 따라서 너비를 9로 지정하면 1이 도트 인쇄에 사용되고 나머지 8은 숫자와 공백을 인쇄하는 데 사용됩니다.
off99555

37

python3에서는 다음이 작동합니다.

>>> v=10.4
>>> print('% 6.2f' % v)
  10.40
>>> print('% 12.1f' % v)
        10.4
>>> print('%012.1f' % v)
0000000010.4

이것은 지난 4 년 동안 바뀌 었으며, 이제는 %포맷팅이 가장 오래된 포맷 방법입니다. 몇 가지 이유를 들어 사용 str.format하거나 f-strings이상이 바람직하다 %. 예전에는 str.format사람들이 몇 가지 이유가 있었지만 f-strings그 구멍을 고쳤습니다. 형식 미니 언어 문서 , 문서str.format 예제문서의 f-string 리터럴 예제
ninMonkey

10

Python 3.x 형식 문자열 구문을 참조하십시오 .

IDLE 3.5.1   
numbers = ['23.23', '.1233', '1', '4.223', '9887.2']

for x in numbers:  
    print('{0: >#016.4f}'. format(float(x)))  

     23.2300
      0.1233
      1.0000
      4.2230
   9887.2000

6

패드를 0으로 남겨 둘 수도 있습니다. 예를 들어 number길이가 9 자이고 0으로 채워진 왼쪽은 다음을 사용합니다.

print('{:09.3f}'.format(number))

따라서이면 number = 4.656출력은 다음과 같습니다.00004.656

예를 들어 출력은 다음과 같습니다.

numbers  = [23.2300, 0.1233, 1.0000, 4.2230, 9887.2000]
for x in numbers: 
    print('{:010.4f}'.format(x))

인쇄물:

00023.2300
00000.1233
00001.0000
00004.2230
09887.2000

이것이 유용 할 수있는 한 가지 예는 파일 이름을 알파벳 순서로 올바르게 나열하려는 경우입니다. 일부 Linux 시스템에서 숫자는 1,10,11, .. 2,20,21, ...입니다.

따라서 파일 이름에 필요한 숫자 순서를 적용하려면 적절한 숫자로 0을 채워야합니다.


2

파이썬 3에서.

GPA = 2.5
print(" %6.1f " % GPA)

6.1f당신은 당신이해야에만 도트 후 2 개 자리를 인쇄하면 점 이후 수단은 1 자리 표시 %6.2f하도록 %6.3f3 자리 숫자는 시점 이후 인쇄 할 수 있습니다.


0

배열과 비슷한 것이 필요했습니다. 그것은 나를 도왔다

some_array_rounded=np.around(some_array, 5)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.