본문 바로가기

C#

C# 숫자 서식 지정(Custom Numeric Format) 사용하기

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("####.##")); // 123

0는 자리수를 채우고, #는 값이 없으면 표시하지 않습니다.

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+4

E 또는 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과 #, 그룹/소수 구분, 섹션 구분, 퍼센트/지수, 이스케이프만 익히면 대부분의 숫자 표기를 안정적으로 제어할 수 있습니다.