개발/JAVA

double 형 비교

보리ing 2020. 3. 3. 17:34

값 비교에서 string은 equals() 함수를 잘 활용하지면

 숫자값은 주로 == 연산자로 값 비교를 해왔다.

그러던 중 똑같은 double형 값을 비교했는데 == 연산자로 확인이 되지 않았다.

 

 

@Test
public void compareNumber(){
List<Double> aList = new ArrayList<> ();
double a = 10.0;

aList.add (a);
List<Double> bList = new ArrayList<> ();
double b = 10;
bList.add (b);
System.out.println (a==b );
System.out.println (aList.get (0)==bList.get (0) );
}

 

위 처럼 double a와 b 를 연산자로 비교하였을때 true지만   <- double은 자료형

list에 넣어서 확인하였을 때는 false로 나오는 경우다.

(Double a = 10.0; Double b =10.0; 인경우는 ==연산자로 비교하였을 때 false로 나온다) <- Double 은 클래스

이럴때 사용하는 것이 함수를 호출한 Number 객체를 인자값과 비교하는 compareTo() 함수다.

위 경우

System.out.println (aList.get (0).compareTo (bList.get (0))==0 );

와같이 사용하여 비교할 수 있었다.

 

compareTo()는 

비교대상이 동일한 값일 때 : 0

비교 대상이 작은 경우 : -1

비교 대상이 큰 경우 : 1

 

double x = 10.0;

 

Double x = 10.0;
System.out.println (x.compareTo(5.0) );
System.out.println (x.compareTo(10.0) );
System.out.println (x.compareTo(20.0) );

 

1

0

-1

 

1과 -1이 헷갈릴 수 있는데 (comepareTo의 인자가 비교대상이다.

난 비교대상이 작은경우(사용하는 값 x가 크기 때문에 이겼다. 긍정 1)

난 비교대상이 큰경우(사용하는 값 x가 작기 때문에 이겼다. 부정 -1)

로 생각한다.