C#의 Convert.ToDouble() 메서드는 문자열로 표현된 숫자를 지정된 문화권(culture)별 서식 정보를 활용하여 배정밀도 부동 소수점 수(double)로 변환합니다. 특히 소수점 구분 기호나 자릿수 그룹화 방식이 언어·지역마다 다를 때, 이 메서드에 IFormatProvider를 전달하면 원하는 형식에 맞춰 정확하게 변환할 수 있습니다.
구문(Syntax)
Convert.ToDouble(String, IFormatProvider) 메서드의 기본 구문은 다음과 같습니다.
public static double ToDouble(string val, IFormatProvider provider);
매개변수 설명
- val: 변환할 숫자가 담긴 문자열입니다.
- provider: 문화권별 서식 정보를 제공하는 객체입니다. 주로
NumberFormatInfo나CultureInfo인스턴스를 사용합니다.
예제(Example)
다음 예제에서는 쉼표(,)를 소수점 구분 기호로, 마침표(.)를 자릿수 구분 기호로 사용하는 사용자 정의 서식을 적용해 문자열을 double 값으로 변환합니다.
using System;
using System.Globalization;
public class Demo {
public static void Main(){
String val = "876876, 878";
NumberFormatInfo formatProvider = new NumberFormatInfo();
formatProvider.NumberDecimalSeparator = ", ";
formatProvider.NumberGroupSeparator = ".";
formatProvider.NumberGroupSizes = new int[] { 2 };
Console.WriteLine("Converted Decimal value...");
double res = Convert.ToDouble(val, formatProvider);
Console.Write("{0}", res);
}
}실행 결과(Output)
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Converted Decimal value... 876876.878
핵심 포인트 정리
- 기본 변환은 시스템의 현재 문화권 설정을 따르므로, 국제화 환경에서는 반드시 명시적인
IFormatProvider를 지정하는 것이 안전합니다. NumberFormatInfo를 직접 구성하면 소수점 구분 기호(NumberDecimalSeparator), 자릿수 구분 기호(NumberGroupSeparator), 그룹화 크기(NumberGroupSizes)를 자유롭게 설정할 수 있습니다.- 변환에 실패하면
FormatException, null 문자열이 전달되면 0을 반환하며 잘못된 범위일 경우OverflowException이 발생할 수 있으므로 예외 처리를 함께 고려하는 것이 좋습니다.