Codeit Logo
로그인
자바 왕기초변수와 연산형 변환
손실이 발생하는데, 왜 double에서 int로의 형변환을 하나요?
2017년 9월 22일
1,046 조회
답변 0
송경호 (잡다구리저장소)
LV
8
송경호 (잡다구리저장소)
LV
8
질문 지켜보기를 시작하면 질문에 답변, 댓글이 달릴 때 알림을 받을 수 있어요.
댓글 0개
0
질문 지켜보기
질문 지켜보기를 시작하면 질문에 답변, 댓글이 달릴 때 알림을 받을 수 있어요.
Float나 Double 처럼 실수 자료형을 사용하다 보면 실수 값의 크기를 비교할 때가 있습니다.
그때 Float, Double 객체에서 제공해주는 Float.compare(), Double.compare() 함수를 사용해서 실수 값을 비교할 수 있습니다.
함수
public static int compare(float f1, float f2)매개변수 (Parameters)
반환값(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 == f2f1이 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 > f2f1이 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 < f2Double.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 == d2d1이 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 > d2d1이 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)
로 생각한다.