C#에서 정수를 문자 숫자로 변환하기
정수를 그에 맞는 문자 형태로 변환할 필요가 있었던 적이 있나요? 이는 보고서를 생성하거나, 수표를 작성하거나, 단순히 텍스트 콘텐츠에서 숫자를 더 쉽게 읽을 수 있도록 하기 위해 여러 애플리케이션에서 흔히 요구되는 사항입니다. 예를 들어 숫자 21
을 "Twenty One"
으로 변환해야 할 수 있습니다.
하지만 거대한 룩업 테이블에 의존하지 않는 솔루션을 원한다면 어떻게 할까요? 이 블로그 포스트에서는 C#에서 정수를 문자 숫자로 변환하기 위해 깔끔하고 효율적인 방법을 살펴보겠습니다.
문제점
정수를 문자 형태로 변환하기 위해 많은 개발자들은 대규모 룩업 테이블을 사용하는 경향이 있으며, 이는 유지 관리가 번거롭고 어려울 수 있습니다. 대신 기초적인 문자열 조작과 재귀를 사용하여 더 우아한 솔루션을 탐색할 것입니다.
해결책
우리는 숫자를 분류하기 위해 배열을 사용하는 사용자 정의 클래스와, 점진적으로 문자 형태를 구성하는 재귀 함수를 사용하여 우리의 목표를 달성할 수 있습니다. 단계별로 분석해 보겠습니다.
HumanFriendlyInteger
클래스
아래 클래스는 정수를 문자 형태로 변환하는 메소드를 포함하고 있습니다:
public static class HumanFriendlyInteger
{
static string[] ones = new string[] { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" };
static string[] teens = new string[] { "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
static string[] tens = new string[] { "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
static string[] thousandsGroups = { "", " Thousand", " Million", " Billion" };
private static string FriendlyInteger(int n, string leftDigits, int thousands)
{
// 숫자 값에 따라 특수 케이스 처리
if (n == 0)
{
return leftDigits;
}
string friendlyInt = leftDigits;
if (friendlyInt.Length > 0)
{
friendlyInt += " ";
}
if (n < 10)
{
friendlyInt += ones[n];
}
else if (n < 20)
{
friendlyInt += teens[n - 10];
}
else if (n < 100)
{
friendlyInt += FriendlyInteger(n % 10, tens[n / 10 - 2], 0);
}
else if (n < 1000)
{
friendlyInt += FriendlyInteger(n % 100, (ones[n / 100] + " Hundred"), 0);
}
else
{
friendlyInt += FriendlyInteger(n % 1000, FriendlyInteger(n / 1000, "", thousands + 1), 0);
if (n % 1000 == 0)
{
return friendlyInt;
}
}
return friendlyInt + thousandsGroups[thousands];
}
public static string IntegerToWritten(int n)
{
if (n == 0)
{
return "Zero";
}
else if (n < 0)
{
return "Negative " + IntegerToWritten(-n);
}
return FriendlyInteger(n, "", 0);
}
}
코드 분석
-
정적 배열: 이 클래스는 숫자의 문자 형태를 저장하기 위해 네 개의 정적 배열을 사용합니다:
ones
: 1-9의 단어를 포함합니다.teens
: 10-19의 단어를 포함합니다.tens
: 20, 30 등의 10의 배수의 단어를 포함합니다.thousandsGroups
: 천, 백만 등과 같은 더 높은 값을 위한 단어를 저장합니다.
-
FriendlyInteger 메소드: 이 재귀 메소드는 숫자를 관리 가능한 부분으로 나눕니다:
- 크기에 따라 숫자의 구성을 처리합니다 (일, 십, 백, 천).
- 각 호출은 숫자 범주를 확인하여 문자열 표현을 재귀적으로 구축합니다.
-
IntegerToWritten 메소드: 정수를 변환하는 공용 메소드입니다.
FriendlyInteger
메소드를 호출하기 전에 0과 음수 처리를 합니다.
결론
이 방법을 사용하면 C#에서 정수를 문자 형태로 효율적으로 변환할 수 있습니다. 이 솔루션은 우아할 뿐만 아니라 방대한 룩업 테이블을 유지하는 번거로움도 피할 수 있습니다.
다음 번에 텍스트로 숫자를 표시해야 할 때는 이 방법을 시도해 보시고, 깔끔하고 인간 친화적인 출력을 즐기세요!