Main Content

텍스트 형식 지정하기

데이터를 텍스트로 변환하고 해당 형식을 제어하기 위해 num2strsprintf 같이 흔히 사용하는 변환 함수에서 형식 지정 연산자를 사용할 수 있습니다. 이러한 연산자는 표기법, 정렬, 유효 자릿수 등을 제어합니다. 형식 지정 연산자는 C 프로그래밍 언어의 printf 함수에서 사용하는 연산자와 유사합니다. 서식 지정된 텍스트는 주로 텍스트를 화면에 표시하거나 파일로 출력할 때 사용됩니다.

예를 들어, %f는 고정소수점 표기법을 사용하여 부동소수점 값을 텍스트로 변환합니다. 소수점 이하 2자릿수를 나타내는 %.2f 또는 출력값의 12개 문자를 나타내는 %12f와 같이, 연산자에 정보를 추가하여 형식을 조정합니다(필요에 따라 공백으로 채움).

A = pi*ones(1,3);
txt = sprintf('%f | %.2f | %12f', A)
txt = 
'3.141593 | 3.14 |     3.141593'

형식 지정자에서 연산자를 일반 텍스트 및 특수 문자와 결합할 수 있습니다. 예를 들어, \n은 새 줄(Newline) 문자를 삽입합니다.

txt = sprintf('Displaying pi: \n %f \n %.2f \n %12f', A)
txt = 
    'Displaying pi: 
      3.141593 
      3.14 
          3.141593'

형식 지정 연산자를 지원하는 함수에는 compose, num2str, sprintf, fprintf와 오류 처리 함수인 assert, error, warning, MException이 있습니다.

형식 지정 연산자의 필드

그림에 표시된 것처럼, 형식 지정 연산자는 6개 필드를 가질 수 있습니다. 이러한 필드는 오른쪽에서 왼쪽으로 변환 문자, 하위유형, 정밀도, 필드 너비, 플래그, 숫자형 식별자입니다. (공백 문자는 연산자 내에 사용할 수 없습니다. 여기서 그림에 쓰인 공백 문자는 단지 가독성을 높이기 위한 목적입니다.) 변환 문자는 선행 % 문자와 함께 반드시 필요한 필드입니다.

Schematic of formatting operator characters.

변환 문자

변환 문자는 출력값의 표기법을 지정합니다. 표기법은 단일 문자로 구성되며, 형식 지정자의 마지막에 표시됩니다.

지정자

설명

c

단일 문자.

d

십진수 표기법(부호 있음).

e

지수 표기법(3.1415e+00에서처럼 소문자 e 사용).

E

지수 표기법(3.1415E+00에서처럼 대문자 E 사용).

f

고정소수점 표기법.

g

%e 또는 %f보다 더 간단한 형식. (불필요한 0은 출력되지 않습니다.)

G

%g와 동일하지만 대문자 E 사용.

o

8진수 표기법(부호 없음).

s

문자형 벡터 또는 string형 배열.

u

십진수 표기법(부호 없음).

x

16진수 표기법(부호 없음, 소문자 af 사용).

X

16진수 표기법(부호 없음, 대문자 AF 사용).

예를 들어, 다양한 변환 문자를 사용하여 숫자 46을 십진수, 고정소수점, 지수, 16진수 형식으로 표시하도록 형식을 지정할 수 있습니다.

A = 46*ones(1,4);
txt = sprintf('%d   %f   %e   %X', A)
txt = 
'46   46.000000   4.600000e+01   2E'

하위유형

하위유형 필드는 변환 문자 바로 앞에 오는 단일 영문자입니다. 하위유형 필드가 없을 경우 변환 문자 %o, %x, %X, %u는 입력 데이터를 정수로 취급합니다. 입력 데이터를 부동소수점 값으로 취급하여 8진수, 십진수 또는 16진수 표현으로 변환하려면 다음 하위유형 지정자 중 하나를 사용하십시오.

b

입력 데이터는 부호 없는 정수가 아니라 배정밀도 부동소수점 값입니다. 예를 들어, 배정밀도 값을 16진수로 출력하려면 %bx와 같은 형식을 사용하십시오.

t

입력 데이터는 부호 없는 정수가 아니라 단정밀도 부동소수점 값입니다.

정밀도

형식 지정 연산자에서 정밀도 필드는 마침표 바로 다음에 오는 음이 아닌 정수입니다. 예를 들어, 연산자 %7.3f에서 정밀도는 3입니다. %g 연산자의 경우, 정밀도는 표시할 유효 자릿수를 나타냅니다. %f, %e, %E 연산자의 경우 정밀도는 소수점 오른쪽에 표시할 자릿수를 나타냅니다.

정밀도 필드를 사용하여 숫자를 다양한 정밀도로 표시합니다.

txt = sprintf('%g   %.2g   %f   %.2f', pi*50*ones(1,4))
txt =

    '157.08   1.6e+02   157.079633   157.08'

입력 텍스트에 대한 형식 지정 연산자에서(예: %s 연산자에서) 정밀도를 지정할 수 있지만, 보통은 그렇게 할 이유가 없습니다. 정밀도를 p로 지정할 경우 p가 입력 텍스트에 포함된 문자의 개수보다 작으면 출력값에 처음 p개 문자만 포함됩니다.

필드 너비

형식 지정 연산자에서 필드 너비는 입력값의 형식을 지정할 때 출력값의 자릿수나 문자 개수를 지정하는 음이 아닌 정수입니다. 예를 들어, 연산자 %7.3f에서 필드 너비는 7입니다.

다양한 필드 너비를 지정할 수 있습니다. 각 출력값의 너비를 표시하려면 | 문자를 사용하십시오. 기본적으로, 필드 너비가 문자 개수보다 크면 출력 텍스트가 공백 문자로 채워집니다.

txt = sprintf('|%e|%15e|%f|%15f|', pi*50*ones(1,4))
txt =

    '|1.570796e+02|   1.570796e+02|157.079633|     157.079633|'

텍스트 입력값에 사용할 경우 필드 너비는 출력 텍스트를 공백으로 채울지 여부를 결정할 수 있습니다. 필드 너비가 입력 텍스트에 포함된 문자의 개수와 같거나 작은 경우에는 영향이 없습니다.

txt = sprintf('%30s', 'Pad left with spaces')
txt =

    '          Pad left with spaces'

플래그

선택적 플래그는 출력 텍스트의 추가적인 형식 지정을 제어합니다. 아래 표에 플래그로 사용할 수 있는 문자가 설명되어 있습니다.

문자

설명

마이너스 기호(-)

해당 필드에서 변환된 인수를 왼쪽으로 맞춥니다.

%-5.2d

플러스 기호(+)

숫자형 값의 경우 항상 선행 부호 문자(+ 또는 -)를 출력합니다.
텍스트 값의 경우 해당 필드에서 변환된 인수를 오른쪽으로 맞춥니다.

%+5.2d
%+5s

공백

값 앞에 공백을 삽입합니다.

% 5.2f

0

공백이 아니라 0으로 채웁니다.

%05.2f

파운드 기호(#)

선택한 수치 변환을 수정합니다.

  • %o, %x 또는 %X의 경우 0, 0x 또는 0X 접두사를 출력합니다.

  • %f, %e 또는 %E의 경우 정밀도가 0이어도 소수점을 출력합니다.

  • %g 또는 %G의 경우 후행 0 또는 소수점을 제거하지 않습니다.

%#5.0f

출력값을 오른쪽 및 왼쪽으로 맞춥니다. 디폴트 동작은 출력 텍스트를 오른쪽으로 맞추는 것입니다.

txt = sprintf('right-justify: %12.2f\nleft-justify: %-12.2f',...
              12.3, 12.3)
txt =

    'right-justify:        12.30
     left-justify: 12.30       '

양수에 + 기호를 표시합니다. 디폴트 동작은 양수에 대해 선행 + 기호를 생략하는 것입니다.

txt = sprintf('no sign: %12.2f\nsign: %+12.2f',...
              12.3, 12.3)
txt =

    'no sign:        12.30
     sign:       +12.30'

공백과 0으로 왼쪽을 채웁니다. 디폴트 동작은 공백으로 채우는 것입니다.

txt = sprintf('Pad with spaces: %12.2f\nPad with zeroes: %012.2f',...
              5.2, 5.2)
txt =

    'Pad with spaces:         5.20
     Pad with zeroes: 000000005.20'

참고

형식 지정 연산자에 둘 이상의 플래그를 지정할 수 있습니다.

값 식별자

기본적으로, sprintf와 같은 함수는 입력 인수의 값을 순차적으로 출력 텍스트에 삽입합니다. 입력 인수를 비순차적으로 처리하려면 형식 지정자에 숫자형 식별자를 사용하여 순서를 지정하십시오. % 기호 바로 다음에 정수가 오고, 그 다음에 $ 기호가 오는 형식으로 비순차적인 인수를 지정합니다.

순차적으로 정렬식별자를 기준으로 정렬
sprintf('%s %s %s',...
        '1st','2nd','3rd')

ans =

    '1st 2nd 3rd'
sprintf('%3$s %2$s %1$s',...
        '1st','2nd','3rd')

ans =

    '3rd 2nd 1st'

특수 문자

특수 문자를 출력 텍스트에 포함할 수 있습니다. 그러나, 특수 문자는 일반 텍스트로 입력할 수 없기 때문에 특정한 문자 시퀀스를 사용하여 나타내야 합니다. 특수 문자를 출력 텍스트에 삽입하려면 아래 표에 나와 있는 문자 시퀀스를 사용하십시오.

특수 문자

형식 지정자에서의 표현

작은따옴표

''

퍼센트 문자

%%

백슬래시

\\

경보

\a

백스페이스

\b

폼 피드(FF)

\f

새 줄(Newline)

\n

캐리지 리턴

\r

가로 탭

\t

세로 탭

\v

그 Unicode® 숫자형 값을 16진수 N으로 나타낼 수 있는 문자

\xN

예: sprintf('\x5A')'Z'를 반환합니다.

그 Unicode 숫자형 값을 8진수 N으로 나타낼 수 있는 문자

\N

예: sprintf('\132')'Z'를 반환합니다.

필드 너비와 정밀도 설정하기

형식 지정 연산자는 출력 텍스트의 형식을 지정된 필드 너비와 정밀도로 지정하기 위한 일련의 규칙을 따릅니다. 또한, 형식 지정자 외부에서 필드 너비와 정밀도의 값을 지정하고, 필드 너비와 정밀도에 번호가 지정된 식별자를 사용할 수도 있습니다.

정밀도와 필드 너비의 형식 지정에 대한 규칙

아래 그림은 필드 너비 설정과 정밀도 설정이 형식 지정 함수의 출력값에 영향을 미치는 방식을 보여줍니다. 이 그림에서, 형식 지정 연산자의 % 기호 다음에 오는 0은 공백 문자가 아니라 선행 0을 출력 텍스트에 추가하는 것을 의미합니다.

Flowchart relating input value, Format operator, and output text.

  • 정밀도를 지정하지 않을 경우 디폴트 값으로 6이 설정됩니다.

  • 정밀도 p가 입력값의 소수부에 포함된 자릿수보다 작을 경우, 소수점 뒤에 p개의 자릿수만 표시됩니다. 해당 소수 값은 출력값에 반올림되어 표시됩니다.

  • 정밀도 p가 입력값의 소수부에 포함된 자릿수 f보다 클 경우, 소수점 뒤에 p개의 자릿수가 표시됩니다. 소수부는 출력값에서 오른쪽에 p-f개의 0을 채워 확장됩니다.

  • 지정하지 않을 경우 필드 너비는 디폴트 값으로 p+1+n이 설정되며, 여기서 n은 입력값의 정수 부분의 자릿수입니다.

  • 필드 너비 wp+1+n보다 클 경우, 출력값의 정수 부분은 왼쪽에 w-(p+1+n)개의 추가 문자가 채워져 확장됩니다. 형식 지정 연산자에 0 플래그를 포함시키지 않는 한 공백 문자가 추가 문자로 사용됩니다. 0 플래그를 포함시킬 경우에는 0이 추가 문자로 사용됩니다.

형식 지정자 외부에서 필드 너비 및 정밀도 지정하기

순차적 인수 목록의 값을 사용하여 필드 너비와 정밀도를 지정할 수 있습니다. 형식 지정 연산자의 필드 너비 필드나 정밀도 필드 대신 별표(*)를 사용하십시오.

예를 들어, 3개 숫자의 형식을 지정하고 이러한 숫자를 표시합니다. 각각의 경우에 별표를 사용하여 형식 지정자 다음에 오는 입력 인수에서 필드 너비 또는 정밀도를 가져오도록 지정합니다.

txt = sprintf('%*f   %.*f   %*.*f',...
              15,123.45678,...     
              3,16.42837,...       
              6,4,pi)
txt =

    '     123.456780   16.428   3.1416'

아래 표에는 예에 나오는 각 형식 지정 연산자의 효과가 설명되어 있습니다.

형식 지정 연산자

설명

%*f

너비를 다음에 오는 입력 인수 15로 지정합니다.

%.*f

정밀도를 그다음 입력 인수 3으로 지정합니다.

%*.*f

너비와 정밀도를 그다음 입력 인수 64로 지정합니다.

두 가지 스타일을 혼합할 수 있습니다. 예를 들어, 다음에 오는 입력 인수에서 필드 너비를 가져오고 형식 지정자에서 정밀도를 가져올 수 있습니다.

txt = sprintf('%*.2f', 5, 123.45678)
txt =

    '123.46'

너비 필드와 정밀도 필드에 번호가 매겨진 식별자 지정하기

아래 그림에 표시된 대체 구문을 사용하여 필드 너비와 정밀도를 비순차적 인수 목록의 값으로 지정할 수도 있습니다. 형식 지정 연산자 내에서 별표 다음에 숫자가 지정된 식별자가 오고, 그다음에 $ 기호가 오는 형식으로 필드 너비와 정밀도를 지정합니다. 형식 지정자 다음에 오는 입력 인수로 필드 너비와 정밀도의 값을 지정합니다.

Schematic of formatting operator characters.

예를 들어, 3개 숫자의 형식을 지정하고 이러한 숫자를 표시합니다. 각각의 경우에 번호가 지정된 식별자를 사용하여 형식 지정자 다음에 오는 입력 인수에서 필드 너비 또는 정밀도를 가져오도록 지정합니다.

txt = sprintf('%1$*4$f   %2$.*5$f   %3$*6$.*7$f',...
              123.45678, 16.42837, pi, 15, 3, 6, 4)
txt =

    '     123.456780   16.428   3.1416'

아래 표에는 예에 나오는 각 형식 지정 연산자의 효과가 설명되어 있습니다.

형식 지정 연산자

설명

%1$*4$f

1$는 첫 번째 입력 인수 123.45678을 값으로 지정합니다.

*4$는 네 번째 입력 인수 15를 필드 너비로 지정합니다.

%2$.*5$f

2$는 두 번째 입력 인수 16.42837을 값으로 지정합니다.

.*5$는 다섯 번째 입력 인수 3을 정밀도로 지정합니다.

%3$*6$.*7$f

3$는 세 번째 입력 인수 pi를 값으로 지정합니다.

*6$는 여섯 번째 입력 인수 6을 필드 너비로 지정합니다.

.*7$는 일곱 번째 입력 인수 4를 정밀도로 지정합니다.

식별자 사용에 대한 제한 사항

형식 지정 연산자 중 식별자 필드가 있는 경우, 그 형식 지정자에 포함된 모든 연산자에 식별자 필드가 있어야 합니다. 동일한 함수 호출에 순차적 정렬과 비순차적 정렬을 동시에 사용하면 순차적 식별자와 비순차적 식별자 사이의 첫 번째 전환에서 출력값이 잘립니다.

유효한 구문유효하지 않은 구문
sprintf('%d %d %d %d',...
        1,2,3,4)

ans =

    '1 2 3 4'
sprintf('%d %3$d %d %d',...
        1,2,3,4)

ans =

    '1 '

함수 호출에서 형식 지정자에 포함된 형식 지정 연산자 개수보다 많은 입력 인수를 제공할 경우 연산자가 재사용됩니다. 그러나, 순차적 정렬을 사용하는 함수 호출만 형식 지정 연산자를 재사용할 수 있습니다. 번호가 지정된 식별자를 사용하는 경우에는 형식 지정 연산자를 재사용할 수 없습니다.

유효한 구문유효하지 않은 구문
sprintf('%d',1,2,3,4)

ans =

    '1234'
sprintf('%1$d',1,2,3,4)

ans =

    '1'

입력 데이터가 벡터 또는 배열인 경우 번호가 지정된 식별자를 사용하면 출력값에 형식 지정된 데이터가 포함되지 않습니다.

유효한 구문유효하지 않은 구문
v = [1.4 2.7 3.1];
sprintf('%.4f %.4f %.4f',v)

ans =

    '1.4000 2.7000 3.1000'
v = [1.4 2.7 3.1];
sprintf('%3$.4f %1$.4f %2$.4f',v)

ans =

  1×0 empty char array

참고 항목

| | |

관련 항목

외부 웹사이트