이전 섹션에서 문자열 자리 표시자의 두 가지 활용 방식을 배웠습니다. 사실 이 두 가지 방법 외에도 C#은 더욱 복잡한 서식 규칙을 지원합니다.
기본 서식 자리 표시자 문법
{인덱스,정렬옵션:서식코드}
1、index(인덱스)
인덱스 / 보간 변수, 필수 입력값
기존 숫자형 자리 표시자:Console.WriteLine(“{0}”, 123); 코드는 {0} 위치에 숫자 123을 삽입합니다
문자열 보간 구문 $"":숫자 인덱스 없이 변수명을 직접 적을 수 있습니다. 예시 Console.WriteLine($”Tom is {age} years old”)
예시 코드
int money = 1000;
Console.WriteLine("원본 값:{0}", money);
Console.WriteLine("통화 서식:{0:C}", money);
Console.WriteLine("10자리 오른쪽 정렬 통화:|{0,10:C}|", money);Code language: JavaScript (javascript)
원본 값:1000
통화 서식:$1,000.00
10자리 오른쪽 정렬 통화:| $1,000.00|
보간 문법으로 작성한 동일 코드
int money = 500;
Console.WriteLine($"원본 값:{money}");
Console.WriteLine($"통화 서식:{money:C}");
Console.WriteLine($"10자리 오른쪽 정렬 통화:|{money,10:C}|");Code language: JavaScript (javascript)
2、alignment(정렬 옵션)
정렬 지정자, 선택 사항, 쉼표 ,로 구분해서 작성
기능:출력 최소 문자 너비와 좌우 정렬 방식을 제어
예시:Console.WriteLine(“{0,10}”, 123); // 총 10문자 너비를 차지하며 숫자는 오른쪽 정렬됨

출력 결과를 보면 123 왼쪽에 공백이 많이 생깁니다. 숫자 10은 총 10자리를 의미하며, 123 앞에 공백 7개를 채워 오른쪽 정렬하는 원리입니다.
양수:오른쪽 정렬, 너비가 부족하면 왼쪽에 공백 채움 예시:{0,10} → 10문자 너비, 숫자 오른쪽 정렬
음수:왼쪽 정렬, 너비가 부족하면 오른쪽에 공백 채움 예시:{0,-10} → 10문자 너비, 숫자 왼쪽 정렬
코드를 아래처럼 수정해서 확인해보겠습니다
Console.WriteLine("{0,-10}", 123); // 10문자 너비를 사용하고 음수이므로 숫자가 왼쪽 정렬됨Code language: JavaScript (javascript)

공백 구분이 어려우므로 양옆에 세로 막대를 붙여 차이를 명확히 확인합니다
Console.WriteLine("|{0,-10}|", 123);
Console.WriteLine("|{0,10}|", 456);Code language: JavaScript (javascript)

양옆 세로선을 추가하면 정렬 규칙이 한눈에 파악됩니다. 10은 고정 10자 너비이고 음수는 왼쪽 정렬, 양수는 오른쪽 정렬이며 남은 자리는 공백으로 채워집니다.
문자열 보간으로 작성한 동일 기능 코드는 다음과 같습니다
int one = 123;
int two = 456;
Console.WriteLine($"|{one,-10}|");
Console.WriteLine($"|{two,-10}|");Code language: JavaScript (javascript)

3、format(서식 코드)
서식 필드, 선택 사항, 콜론 :으로 앞 부분과 구분
숫자 출력 형식을 제어:통화, 소수점, 과학적 표기법, 16진수 등
서식 필드 구조 :Axx
:자리 표시자에 바로 붙여 써야 하며 공백을 넣으면 안 됨A:단일 문자 서식 지정자(총 9가지 내장 표준 서식, 일부 대소문자 구분)xx:정밀도 지정자(선택 가능, 1~2자리 숫자, 의미는 서식 문자에 따라 달라짐)
// F4:고정 소수점 서식, 소수점 4자리 유지
Console.WriteLine("{0:F4}", 12.345678);
// 문자열 보간으로 작성한 동일 코드
Console.WriteLine($"{12.345678:F4}");Code language: JavaScript (javascript)

추가 예시를 더 살펴보겠습니다
double myDouble = 12.345678;
Console.WriteLine("{0,-10:G} -- 일반 서식", myDouble); // 12.345678 -- 일반 서식
Console.WriteLine("{0,-10} -- 기본 서식", myDouble); // 12.345678 -- 기본 서식
Console.WriteLine("{0,-10:F4} -- 고정 소수점", myDouble); // 12.3457 -- 고정 소수점
Console.WriteLine("{0,-10:C} -- 통화", myDouble); // $12.35 -- 통화
Console.WriteLine("{0,-10:E3} -- 과학 표기법", myDouble);//1.235E+001 -- 과학 표기법
Console.WriteLine("{0,-10:x} -- 16진 정수", 1194719); // 123adf -- 16진 정수Code language: JavaScript (javascript)
9가지 표준 숫자 서식 지정자 대응표
| 식별자 | 이름 | 기능 | 정밀도 의미 | 출력 예시 |
|---|---|---|---|---|
| C/c | Currency 통화 | 현지 통화 기호 표시 | 소수점 자릿수 | {0:C} 12.5 → $12.50 |
| D/d | Decimal 십진 정수 | int 타입 전용, 부족한 자릿수 앞에 0 채움 | 최소 표시 자릿수 | {0:D4} 12 → 0012 |
| F/f | Fixed-point 고정 소수점 | 소수점 자릿수 고정 | 유지할 소수점 자릿수 | {0:F4} 12.345678 →12.3457 |
| G/g | General 일반 서식 | 고정 소수/과학 표기 자동 전환, 기본 서식 | 유효 숫자 자릿수 | {0:G4} 12.345678 →12.35 |
| X/x | Hexadecimal 16진수(대소문자 구분) | 16진수 출력, X 대문자/x 소문자 | 최소 표시 자릿수 | {0:x} 180026 → 2bf3a |
| N/n | Number 자릿수 구분 숫자 | 3자리마다 구분 기호 삽입 | 소수점 자릿수 | {0:N2} 12345678.54321 →12,345,678.54 |
| P/p | Percent 백분율 | 값 ×100 후 % 기호 추가 | 소수점 자릿수 | {0:P2} 0.1221897 →12.22 % |
| R/r | Round-trip 왕복 서식 | 서식 적용 후 정밀도 손실 없이 원본 숫자 복구 가능 | 정밀도 무시 | {0:R} 1234.21897 →1234.21897 |
| E/e | Scientific 과학 표기법(대소문자 구분) | 지수 표기 출력, E 대문자/e 소문자 | 가수 부분 소수점 자릿수 | {0:e4}12.3456789 →1.2346e+001 |
숫자 서식 문자열