C#의 Double.CompareTo() 메서드는 현재 double 인스턴스를 지정된 개체 또는 Double 값과 비교한 후, 두 값의 대소 관계를 나타내는 정수를 반환합니다. 이 메서드를 활용하면 두 배정밀도 부동 소수점 숫자가 서로 같은지, 아니면 어느 쪽이 더 큰지 손쉽게 판별할 수 있습니다.
구문(Syntax)
Double.CompareTo() 메서드에는 두 가지 오버로드가 있습니다.
public int CompareTo (double val); public int CompareTo (object val);
첫 번째 구문의 매개변수 val은 비교 대상이 되는 배정밀도 부동 소수점 숫자(double)이며, 두 번째 구문의 val은 비교할 개체(object)입니다.
반환 값
- 현재 인스턴스가 지정된 값보다 작으면: 0 미만의 정수
- 현재 인스턴스가 지정된 값과 같으면: 0
- 현재 인스턴스가 지정된 값보다 크면: 0보다 큰 정수
예제 1 – double 값끼리 비교하기
아래 예제에서는 두 개의 double 변수를 CompareTo() 메서드로 비교해 봅니다.
using System;
public class Demo {
public static void Main() {
double d1 = 150d;
double d2 = 150d;
Console.WriteLine("Double1 Value = "+d1);
Console.WriteLine("Double2 Value = "+d2);
Console.WriteLine("Are both the double values equal? = "+d1.CompareTo(d2));
}
}실행 결과
위 프로그램을 실행하면 다음과 같은 출력이 나타납니다.
Double1 Value = 150 Double2 Value = 150 Are both the double values equal? = 0
두 값이 모두 150으로 동일하기 때문에 CompareTo() 메서드는 0을 반환합니다.
예제 2 – double 값과 object 비교하기
이번에는 double 값을 object 타입의 값과 비교하는 두 번째 오버로드를 사용해 보겠습니다.
using System;
public class Demo {
public static void Main() {
double d1 = 20d;
object d2 = 20d;
Console.WriteLine("Double1 Value = "+d1);
Console.WriteLine("Double2 Value = "+d2);
Console.WriteLine("Are both the double values equal? = "+d1.CompareTo(d2));
}
}실행 결과
Double1 Value = 20 Double2 Value = 20 Are both the double values equal? = 0
double 타입과 object 타입을 비교했지만 두 값이 20으로 같으므로 역시 0이 반환됩니다.
정리
Double.CompareTo() 메서드는 double 값의 대소 비교가 필요한 정렬(Sort) 로직이나 조건 분기 처리에 유용하게 활용됩니다. 반환 값이 음수인지, 0인지, 양수인지에 따라 비교 결과를 명확하게 판단할 수 있다는 점을 기억해 두세요.