Main Content

sprintf

데이터 형식을 string형 또는 문자형 벡터로 지정

설명

예제

str = sprintf(formatSpec,A1,...,An)formatSpec으로 지정된 형식 지정 연산자를 사용하여 배열 A1,...,An의 데이터 값의 형식을 지정하고, 결과로 생성되는 텍스트를 str로 반환합니다. sprintf 함수는 A1,...,An의 값을 열 순서대로 형식 지정합니다. formatSpec이 string형이면 출력 배열 str도 string형입니다. 그렇지 않으면 str은 문자형 벡터입니다.

여러 개의 서식 지정된 텍스트 조각을 string형 배열이나 문자형 벡터로 구성된 셀형 배열로 반환하려면 compose 함수를 사용하십시오.

[str,errmsg] = sprintf(formatSpec,A1,...,An)은 연산에 성공하지 못했을 때 문자형 벡터로 오류 메시지를 반환합니다. 그렇지 않은 경우 errmsg는 비어 있습니다.

str = sprintf(literalText)literalText에 포함된 이스케이프 문자 시퀀스(예: \n, \t)를 변환합니다. 다른 모든 문자는 변경하지 않고 그대로 반환합니다. literalText가 형식 지정 연산자(예: %f)를 포함하는 경우, str은 이 연산자 및 연산자 뒤에 오는 모든 문자를 무시합니다.

예제

모두 축소

%e, %f, %g 지정자를 사용하여 부동소수점 숫자의 형식을 지정합니다.

A = 1/eps;
str_e = sprintf('%0.5e',A)
str_e = 
'4.50360e+15'
str_f = sprintf('%0.5f',A)
str_f = 
'4503599627370496.00000'
str_g = sprintf('%0.5g',A)
str_g = 
'4.5036e+15'

리터럴 텍스트와 배열 값을 결합하여 문자형 벡터를 만듭니다.

formatSpec = 'The array is %dx%d.';
A1 = 2;
A2 = 3;
str = sprintf(formatSpec,A1,A2)
str = 
'The array is 2x3.'

서식 지정된 텍스트를 string형으로 반환하려면 sprintf 함수를 호출할 때 formatSpec을 문자형 벡터 대신 string형으로 지정하십시오.

데이터를 변환하고 그 결과를 string형으로 반환합니다.

formatSpec = "The current time is: %d:%d %s";
A1 = 11;
A2 = 20;
A3 = 'a.m.';
str = sprintf(formatSpec,A1,A2,A3)
str = 
"The current time is: 11:20 a.m."

입력 string형을 변환합니다. 텍스트를 포함하는 입력 배열은 문자형 벡터나 string형이 될 수 있습니다.

A1 = 2;
A2 = 35;
A3 = "p.m.";
str = sprintf(formatSpec,A1,A2,A3)
str = 
"The current time is: 2:35 p.m."

배정밀도 값을 명시적으로 정수로 변환합니다.

str = sprintf('%d',round(pi))
str = 
'3'

출력된 값의 최소 너비를 지정합니다.

str = sprintf('%025d',123456)
str = 
'0000000000000000000123456'

%025d 형식 지정자의 0 플래그는 출력값 앞에 선행 0을 표시하도록 지정합니다.

n$ 위치 식별자를 사용하여 입력값을 다시 정렬합니다.

A1 = 'X';
A2 = 'Y';
A3 = 'Z';
formatSpec = ' %3$s %2$s %1$s';
str = sprintf(formatSpec,A1,A2,A3)
str = 
' Z Y X'
C = { 1,   2,   3 ;
     'AA','BB','CC'};

str = sprintf(' %d %s',C{:})
str = 
' 1 AA 2 BB 3 CC'

구문 C{:}C의 각 셀의 내용을 열 순서대로 포함하는, 쉼표로 구분된 배열 목록을 생성합니다. 예를 들면 C{1}==1이고 C{2}=='AA'입니다.

입력 인수

모두 축소

출력 필드의 형식으로, 형식 지정 연산자를 사용하여 지정됩니다. formatSpec은 일반 텍스트와 특수 문자를 포함할 수도 있습니다.

formatSpec\n과 같이 이스케이프 문자를 나타내는 리터럴 텍스트가 포함된 경우 sprintf 함수는 이스케이프 문자를 변환합니다.

formatSpec은 작은따옴표로 묶인 문자형 벡터이거나 string형 스칼라일 수 있습니다.

형식 지정 연산자

형식 지정 연산자는 퍼센트 기호 %로 시작하고 변환 문자로 끝납니다. 변환 문자는 반드시 필요합니다. %와 변환 문자 사이에는 필요에 따라 식별자, 플래그, 필드 너비, 정밀도 및 하위유형 연산자를 지정할 수 있습니다. (연산자 사이에는 공백을 사용할 수 없지만 여기서는 읽기 편하도록 표시되어 있습니다.)

Schematic of formatting operator characters.

변환 문자

다음 표에는 숫자형 데이터와 문자 데이터의 형식을 텍스트로 지정하는 변환 문자가 나와 있습니다.

값 유형변환세부 정보

정수, 부호 있음

%d 또는 %i

10진법

정수, 부호 없음

%u

10진법

%o

8진법(8진수)

%x

16진법(16진수), 소문자 af

%X

%x와 동일, 대문자 AF

부동소수점 숫자

%f

고정소수점 표기법(정밀도 연산자를 사용하여 소수점 이하 자릿수를 지정합니다.)

%e

지수 표기법(예: 3.141593e+00)(정밀도 연산자를 사용하여 소수점 이하 자릿수를 지정합니다.)

%E

%e와 동일하되 대문자임(예: 3.141593E+00)(정밀도 연산자를 사용하여 소수점 이하 자릿수를 지정합니다.)

%g

%e 또는 %f 중 더 간단한 형식(후행 0을 포함하지 않음)(정밀도 연산자를 사용하여 소수점 이하 유효 자릿수를 지정합니다.)

%G

%E 또는 %f 중 더 간단한 형식(후행 0을 포함하지 않음)(정밀도 연산자를 사용하여 소수점 이하 유효 자릿수를 지정합니다.)

문자 또는 string형

%c

단일 문자

%s

문자형 벡터 또는 string형 배열. 출력 텍스트의 유형은 formatSpec의 유형과 같습니다.

선택적 연산자

식별자, 플래그, 필드 너비, 정밀도, 하위유형 등의 선택적 연산자는 출력 텍스트의 형식을 추가로 정의합니다.

  • 식별자

    함수 입력 인수를 처리하는 순서입니다. n$ 구문을 사용합니다. 여기서 n은 함수 호출에서 다른 입력 인수의 위치를 나타냅니다.

    예: ('%3$s %2$s %1$s %2$s','A','B','C')는 입력 인수 'A', 'B', 'C'C B A B로 출력합니다.

    참고: 입력 인수가 배열인 경우, 식별자를 사용해 그 입력 인수의 특정한 배열 요소를 지정할 수 없습니다.

  • 플래그

    '–'

    왼쪽 맞춤.
    예: %-5.2f
    예: %-10s

    '+'

    모든 숫자형 값에 대해 항상 부호 문자(+ 또는 –)를 출력합니다.
    예: %+5.2f
    텍스트 오른쪽 맞춤.
    예: %+10s

    ' '

    값 앞에 공백을 삽입합니다.
    예: % 5.2f

    '0'

    값 앞의 필드 너비를 0으로 채웁니다.
    예: %05.2f

    '#'

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

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

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

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

    예: %#5.0f

  • 필드 너비

    출력할 최소 문자 수입니다. 필드 너비 연산자는 숫자이거나 입력 인수를 가리키는 별표(*)일 수 있습니다.

    *를 필드 너비 연산자로 지정할 경우, 다른 입력 인수가 출력할 너비와 값을 모두 제공해야 합니다. 너비와 값은 인수 쌍이거나 숫자형 배열 내의 쌍일 수 있습니다. *를 필드 너비 연산자로 사용하면 각 값을 다른 너비로 출력할 수 있습니다.

    예: 입력 인수 ('%12d',intmax)('%*d',12,intmax)와 동일합니다.

    예: 입력 인수 ('%*d',[2 10 5 100])10에 두 개의 공백을 할당하고 100에 다섯 개의 공백을 할당하여 '10 100'을 반환합니다. 다른 방법으로, ('%*d',2,10,5,100)과 같이 필드 너비와 값을 여러 개의 인수로 지정할 수도 있습니다.

    플래그로 지정되지 않은 경우 이 함수는 값 앞에 공백을 사용하여 필드 너비를 채웁니다.

  • 정밀도

    %f, %e 또는 %E의 경우

    소수점 오른쪽의 자릿수입니다.
    예: '%.4f'pi'3.1416'으로 출력함

    %g 또는 %G의 경우

    유효 자릿수입니다.
    예: '%.4g'pi'3.142'로 출력함

    정밀도 연산자는 숫자이거나 인수를 가리키는 별표(*)일 수 있습니다.

    *를 필드 정밀도 연산자로 지정할 경우, 다른 입력 인수가 출력할 정밀도와 값을 모두 제공해야 합니다. 정밀도와 값은 인수 쌍이거나 숫자형 배열 내의 쌍일 수 있습니다. *를 정밀도 연산자로 사용하면 각 값을 다른 정밀도로 출력할 수 있습니다.

    *.*를 필드 너비 및 정밀도 연산자로 지정할 경우, 세 개(필드 너비, 정밀도, 값)를 한 단위로 구성해 지정해야 합니다.

    예: 입력 인수 ('%.4f',pi)('%.*f',4,pi)와 동일합니다.

    예: 입력 인수 ('%6.4f',pi)('%*.*f',6,4,pi)와 동일합니다.

    예: 입력 인수 ('%*.*f',6,4,pi,9,6,exp(1))'3.1416 2.718282'를 반환합니다. 여기서, 96exp(1)의 출력값의 필드 너비와 정밀도로 사용되었습니다.

    참고

    부동소수점 값에 대한 입력 숫자 데이터형의 정밀도를 초과하는 정밀도 연산자를 지정하는 경우 결과는 지정한 정밀도에 대한 입력값과 일치하지 않을 수 있습니다. 결과는 사용자의 컴퓨터 하드웨어와 운영 체제에 따라 다릅니다.

  • 하위유형

    하위유형 연산자를 사용하여 부동소수점 값을 8진수 값, 10진수 값, 16진수 값 중 하나로 출력할 수 있습니다. 하위유형 연산자는 변환 문자 바로 앞에 옵니다. 다음 표에는 하위유형을 사용할 수 있는 변환이 나와 있습니다.

    입력값 유형

    하위유형 및 변환 문자

    출력값 유형

    부동소수점 숫자

    %bx 또는 %bX
    %bo
    %bu

    배정밀도 16진수, 8진수 또는 십진수 값
    예: %bxpi400921fb54442d18로 출력함

    %tx 또는 %tX
    %to
    %tu

    단정밀도 16진수, 8진수 또는 십진수 값
    예: %txpi40490fdb로 출력함

형식 지정 연산자 앞이나 뒤의 텍스트

formatSpec은 퍼센트 기호 % 앞이나 변환 문자 뒤에 텍스트를 추가로 포함할 수도 있습니다. 가능한 텍스트는 다음과 같습니다.

  • 출력할 일반 텍스트.

  • 일반 텍스트로 입력할 수 없는 특수 문자. 다음 표에는 formatSpec에서 특수 문자를 나타내는 방식이 나와 있습니다.

    특수 문자

    표현

    작은따옴표

    ''

    퍼센트 문자

    %%

    백슬래시

    \\

    경보

    \a

    백스페이스

    \b

    폼 피드(FF)

    \f

    새 줄(Newline)

    \n

    캐리지 리턴

    \r

    가로 탭

    \t

    세로 탭

    \v

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

    \xN

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

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

    \N

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

형식 지정 연산자를 사용한 변환의 중요 동작

  • 수치 변환은 복소수의 실수부만 출력합니다.

  • 숫자형 값에 대한 텍스트 변환과 같이 데이터에 맞지 않는 변환을 지정하는 경우 MATLAB®은 지정된 변환을 무시하고 %e를 사용합니다.

    예: '%s'pi3.141593e+00으로 변환합니다.

  • 텍스트 변환(%c%s)을 정수 값에 적용하는 경우 MATLAB은 유효한 문자 코드에 대응하는 값을 문자로 변환합니다.

    예: '%s'[65 66 67]ABC로 변환합니다.

숫자형 배열, 문자형 배열 또는 string형 배열입니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string

형식 지정 연산자가 없는 입력 텍스트로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. sprintfliteralText에 포함된 이스케이프 문자 시퀀스를 모두 변환합니다.

데이터형: char | string

출력 인수

모두 축소

서식 지정된 텍스트로, 문자형 벡터나 string형 스칼라로 반환됩니다. 출력값 유형은 formatSpec 유형과 일치합니다.

오류 메시지로, 작업이 실패하면 문자형 벡터로 반환됩니다. 그렇지 않은 경우 errmsg는 비어 있습니다.

  • sprintf 함수는 fprintf와 유사하지만, fprintf는 파일이나 명령 창에 출력합니다.

  • 읽기 함수 sscanffscanf에 대한 형식 지정자는 쓰기 함수 sprintffprintf에 대한 형식과 다릅니다. 읽기 함수에서 정밀도 필드는 지원되지 않습니다. 너비 필드는 쓰기를 위한 최솟값은 지정하지만 읽기를 위한 최댓값은 지정하지 않습니다.

  • 유효하지 않은 형식 지정 연산자 또는 특수 문자를 지정할 경우, sprintf 함수는 유효하지 않은 연산자 또는 문자 전까지의 텍스트는 출력하고 나머지는 버립니다.

    예: formatSpec'value = %z'인 경우, %z는 형식 지정 연산자가 아니기 때문에 sprintf 함수는 'value ='를 출력합니다.

    예: formatSpec'character \x99999 = %s'인 경우, \x99999는 유효한 특수 문자가 아니기 때문에 sprintf 함수는 'character'를 출력합니다.

참고 문헌

[1] Kernighan, B. W., and D. M. Ritchie, The C Programming Language, Second Edition, Prentice-Hall, Inc., 1988.

[2] ANSI specification X3.159-1989: “Programming Language C,” ANSI, 1430 Broadway, New York, NY 10018.

확장 기능

버전 내역

R2006a 이전에 개발됨