C#에서 Convert.ToDecimal() 메서드는 숫자를 나타내는 문자열을 10진수(decimal) 값으로 변환하는 기능을 제공합니다. 특히 이 오버로드는 지정된 문화권(culture)별 형식 정보를 활용하기 때문에, 소수점 구분 기호나 천 단위 구분 기호가 문화권마다 다른 다국어 환경에서 매우 유용하게 사용됩니다.
메서드 시그니처
해당 메서드의 기본 문법은 다음과 같습니다.
public static decimal ToDecimal(string val, IFormatProvider provider);
매개변수 설명
- val: 변환할 숫자가 포함된 문자열입니다.
- provider: 문화권별 형식 정보(예: 소수점 기호, 그룹 구분 기호 등)를 제공하는
IFormatProvider객체입니다. 일반적으로CultureInfo인스턴스를 전달합니다.
이 메서드는 변환에 성공하면 해당 문자열과 동등한 10진수 값을 반환합니다.
예제 코드
아래 예제는 en-US(영어-미국) 문화권 정보를 사용하여 문자열을 decimal 타입으로 변환하는 과정을 보여줍니다.
using System;
using System.Globalization;
public class Demo {
public static void Main() {
CultureInfo cultures = new CultureInfo("en-US");
String val = "8787";
Console.WriteLine("변환된 Decimal 값...");
decimal res = Convert.ToDecimal(val, cultures);
Console.Write("{0}", res);
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
변환된 Decimal 값... 8787
주의사항 및 발생 가능한 예외
Convert.ToDecimal(String, IFormatProvider) 메서드를 사용할 때는 다음 상황을 유의해야 합니다.
- ArgumentNullException: 변환할 문자열(val)이 null인 경우 발생합니다.
- FormatException: 문자열이 유효한 숫자 형식이 아니거나, 지정한 문화권의 형식 규칙에 맞지 않는 경우 발생합니다.
- OverflowException: 문자열이 decimal 타입이 표현할 수 있는 범위를 초과하는 경우 발생합니다.
따라서 실무에서는 decimal.TryParse() 메서드를 함께 고려하여, 변환 실패 시 예외 대신 안전하게 처리하는 방식을 권장합니다. 또한 소수점 표기가 문화권에 따라 다르다는 점(예: 미국은 1,234.56, 독일은 1.234,56)을 항상 염두에 두면 국제화(i18n) 처리 시 오류를 줄일 수 있습니다.