Custom Numeric Format은 C#에서 숫자를 원하는 모양으로 출력할 때 사용하는 사용자 지정 서식 문자열입니다. 대시보드, 리포트, 로그 등에서 표기 일관성을 확보하고 가독성을 높이는 데 유용합니다.
1. 핵심 규칙 요약
0: 해당 자리에 숫자가 없으면 0을 표시합니다. #: 해당 자리에 숫자가 없으면 표시하지 않습니다. .: 소수점 구분자입니다. ,: 그룹 구분자이거나 스케일(천 단위 나누기) 용도로 사용됩니다. %와 ‰: 값에 각각 100, 1000을 곱해 퍼센트/퍼밀레로 표시합니다. ;: 양수;음수;0 값에 대한 섹션을 구분합니다. E 또는 e: 지수 표기입니다. \ 또는 '텍스트': 리터럴 문자(있는 그대로 출력)입니다.
2. 필수/선택 자리수
double a = 7.3;
Console.WriteLine(a.ToString("0000.00")); // 0007.30
Console.WriteLine(a.ToString("####.##")); // 7.3
double b = 123;
Console.WriteLine(b.ToString("0000.00")); // 0123.00
Console.WriteLine(b.ToString("####.##")); // 1230는 자리수를 채우고, #는 값이 없으면 표시하지 않습니다.
3. 천 단위 구분 및 스케일링
int n = 1234567;
Console.WriteLine(n.ToString("#,0")); // 1,234,567
Console.WriteLine(n.ToString("0,,")); // 1 (백만 단위 스케일)
Console.WriteLine(n.ToString("0.##,,")); // 1.23,를 숫자 사이에 넣으면 그룹 구분자, 형식 끝이나 소수점 왼쪽에 연속으로 두면 1,000 단위로 나눠 표시합니다.
4. 퍼센트/퍼밀레
double r = 0.123;
Console.WriteLine(r.ToString("0%")); // 12%
Console.WriteLine(r.ToString("0.0‰")); // 123.0‰%와 ‰는 서식 전 자동으로 값을 곱합니다. 수동 스케일과 중복 적용하지 않도록 주의합니다.
5. 양수/음수/0 값 서식 분리
int p1 = 1200, p2 = -1200, p3 = 0;
string fmt = "#,0;(#,0);'-'";
Console.WriteLine(p1.ToString(fmt)); // 1,200
Console.WriteLine(p2.ToString(fmt)); // (1,200)
Console.WriteLine(p3.ToString(fmt)); // -;로 구분해 양수;음수;0 세 가지 형태를 각각 지정할 수 있습니다. 두 섹션만 쓰면 첫 섹션이 양수와 0에 공통 적용됩니다.
6. 지수 표기
double x = 12345;
Console.WriteLine(x.ToString("0.00E+0")); // 1.23E+4E 또는 e 다음 자리수 개수로 지수 자릿수를 제어합니다.
7. 리터럴 텍스트와 이스케이프
double w = 5.2;
Console.WriteLine(w.ToString("0.0 'kg'")); // 5.2 kg
Console.WriteLine(w.ToString("\\#0.0")); // #5.2인용부호로 둘러싸거나 역슬래시로 이스케이프하면 특수 문자를 있는 그대로 출력합니다.
8. 문화권(Culture)별 출력
using System;
using System.Globalization;
decimal money = 1234.5m;
Console.WriteLine(money.ToString("#,0.00", new CultureInfo("en-US"))); // 1,234.50
Console.WriteLine(money.ToString("#,0.00", new CultureInfo("fr-FR"))); // 1 234,50그룹/소수 구분자는 CultureInfo에 따라 달라집니다. UI 표시는 사용자 문화권, 데이터 교환은 InvariantCulture를 권장합니다.
9. 흔한 실수 피하기
퍼센트 기호와 수동 스케일을 중복 적용하지 않습니다. 0과 #의 차이를 혼동하지 않습니다. 통화 기호를 문화권에 맞게 표기하려면 Custom 대신 표준 서식 C 또는 CultureInfo를 고려합니다. 로그/파싱 용도는 Culture에 영향받지 않도록 InvariantCulture를 사용합니다.
10. 마무리
Custom Numeric Format은 간단한 규칙으로 강력한 표현을 제공합니다. 0과 #, 그룹/소수 구분, 섹션 구분, 퍼센트/지수, 이스케이프만 익히면 대부분의 숫자 표기를 안정적으로 제어할 수 있습니다.
'C#' 카테고리의 다른 글
| C# ReaderWriterLockSlim으로 읽기/쓰기 성능 최적화 (0) | 2026.07.23 |
|---|---|
| C# SemaphoreSlim으로 비동기 동시성 제한 구현하기 (0) | 2026.07.22 |
| C# Stack<T>와 Queue<T> 성능 비교 및 활용 사례 (0) | 2026.07.21 |
| C# Mutex를 이용한 프로세스 간 동기화 (0) | 2026.07.16 |
| C# XML 직렬화와 역직렬화 고급 기법 (0) | 2026.07.16 |