Java double int 비교 - Java double int bigyo

Codeit Logo

로그인

자바 왕기초변수와 연산형 변환

손실이 발생하는데, 왜 double에서 int로의 형변환을 하나요?

2017년 9월 22일

1,046 조회

답변 0

송경호 (잡다구리저장소)

LV

8

Java double int 비교 - Java double int bigyo

송경호 (잡다구리저장소)

LV

8

Java double int 비교 - Java double int bigyo

질문 지켜보기를 시작하면 질문에 답변, 댓글이 달릴 때 알림을 받을 수 있어요.

댓글 0개

0

질문 지켜보기

질문 지켜보기를 시작하면 질문에 답변, 댓글이 달릴 때 알림을 받을 수 있어요.

Java double int 비교 - Java double int bigyo

Float나 Double 처럼 실수 자료형을 사용하다 보면 실수 값의 크기를 비교할 때가 있습니다.

그때 Float, Double 객체에서 제공해주는 Float.compare(), Double.compare() 함수를 사용해서 실수 값을 비교할 수 있습니다.

함수

public static int compare(float f1, float f2)

매개변수 (Parameters)

float f1 - 비교할 첫번째 float

float f2 - 비교할 두번째 float

반환값(Returns)

반환 값이 0 인경우 - f1과 f2가 같음

반환 값이 0보다 큰 경우 - f1이 f2보다 큼

반환 값이 0보다 작은 경우 - f1이 f2보다 작음

Float.compare() 함수의 사용법을 아래 예제를 통해 알아보겠습니다.

Float 예제

f1과 f2가 같음

float f1 = 123.456f;
float f2 = 123.456f;

if (Float.compare(f1, f2) == 0) {
    System.out.println("f1 == f2");

} else if (Float.compare(f1, f2) > 0) {
    System.out.println("f1 > f2");

} else {
    System.out.println("f1 < f2");

}

결과

f1 == f2

f1이 f2보다 큼

float f1 = 345.678f;
float f2 = 123.456f;

if (Float.compare(f1, f2) == 0) {
    System.out.println("f1 == f2");

} else if (Float.compare(f1, f2) > 0) {
    System.out.println("f1 > f2");

} else {
    System.out.println("f1 < f2");

}

결과

f1 > f2

f1이 f2보다 작음

float f1 = 123.456f;
float f2 = 345.678f;

if (Float.compare(f1, f2) == 0) {
    System.out.println("f1 == f2");

} else if (Float.compare(f1, f2) > 0) {
    System.out.println("f1 > f2");

} else {
    System.out.println("f1 < f2");

}

결과

f1 < f2

Double.compare() 함수의 사용법을 아래 예제를 통해 알아보겠습니다.

Double 예제

d1과 d2가 같음

double d1 = 123.456;
double d2 = 123.456;

if (Double.compare(d1, d2) == 0) {
    System.out.println("d1 == d2");

} else if (Double.compare(d1, d2) > 0) {
    System.out.println("d1 > d2");

} else {
    System.out.println("d1 < d2");

}

결과

d1 == d2

d1이 d2보다 큼

double d1 = 345.678;
double d2 = 123.456;

if (Double.compare(d1, d2) == 0) {
    System.out.println("d1 == d2");

} else if (Double.compare(d1, d2) > 0) {
    System.out.println("d1 > d2");

} else {
    System.out.println("d1 < d2");

}

결과

d1 > d2

d1이 d2보다 작음

double d1 = 123.456;
double d2 = 345.678;

if (Double.compare(d1, d2) == 0) {
    System.out.println("d1 == d2");

} else if (Double.compare(d1, d2) > 0) {
    System.out.println("d1 > d2");

} else {
    System.out.println("d1 < d2");

}

결과

d1 < d2

값 비교에서 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)

로 생각한다.