C#에서 Decimal.ToDouble() 메서드는 지정된 Decimal 값을 동일한 값의 배정밀도(double-precision) 부동 소수점 숫자, 즉 double 타입으로 변환할 때 사용됩니다. 이 메서드는 정적(static) 메서드이므로 인스턴스 생성 없이 Decimal 클래스 이름으로 바로 호출할 수 있습니다.
구문(Syntax)
Decimal.ToDouble() 메서드의 기본 구문은 다음과 같습니다.
public static double ToDouble (decimal val);
여기서 매개변수 val은 double 타입으로 변환하고자 하는 10진수(Decimal) 값입니다. 반환값은 해당 Decimal 값에 대응되는 double 형식의 숫자입니다.
주요 특징
- 정적 메서드:
Decimal.ToDouble(value)형태로 호출합니다. - 반환 타입: 배정밀도 부동 소수점인
double(64비트)입니다. - 정밀도 주의:
decimal은 최대 28~29자리 유효 숫자를 지원하지만,double은 약 15~17자리까지만 정확하므로 매우 큰 수나 정밀한 소수를 변환할 경우 정밀도 손실이 발생할 수 있습니다.
예제 1: 음수 소수 변환
먼저 음수 소수 값을 변환하는 간단한 예제를 살펴보겠습니다.
using System;
public class Demo {
public static void Main(){
Decimal val1 = -0.22m;
Decimal val2 = -0.01m;
Console.WriteLine("Decimal 1 = "+val1);
Console.WriteLine("Decimal 2 = "+val2);
Double res1 = Decimal.ToDouble(val1);
Double res2 = Decimal.ToDouble(val2);
Console.WriteLine("Double value1 (Decimal to Double) = "+res1);
Console.WriteLine("Double value2 (Decimal to Double) = "+res2);
}
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Decimal 1 = -0.22 Decimal 2 = -0.01 Double value1 (Decimal to Double) = -0.22 Double value2 (Decimal to Double) = -0.01
작은 소수 값의 경우 double로 변환해도 표시상 큰 차이가 없음을 확인할 수 있습니다.
예제 2: 큰 정수 변환 시 정밀도 변화
이번에는 상대적으로 큰 숫자를 변환하는 예제입니다.
using System;
public class Demo {
public static void Main(){
Decimal val1 = 23828m;
Decimal val2 = 976587687595766665m;
Console.WriteLine("Decimal 1 = "+val1);
Console.WriteLine("Decimal 2 = "+val2);
Double res1 = Decimal.ToDouble(val1);
Double res2 = Decimal.ToDouble(val2);
Console.WriteLine("Double value1 (Decimal to Double) = "+res1);
Console.WriteLine("Double value2 (Decimal to Double) = "+res2);
}
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Decimal 1 = 23828 Decimal 2 = 976587687595766665 Double value1 (Decimal to Double) = 23828 Double value2 (Decimal to Double) = 9.76587687595767E+17
두 번째 출력 결과에서 볼 수 있듯이, 아주 큰 Decimal 값은 double의 유효 자릿수 제한 때문에 지수 표기법(E+17)으로 표현되며 일부 하위 자릿수 정보가 반올림될 수 있습니다. 따라서 금융 계산처럼 높은 정밀도가 필요한 경우에는 double 대신 decimal 타입을 유지하는 것이 좋습니다.