📖혼자공부하는자바

Hanghae Solution [타입 변환]

개발자는신이야 2022. 11. 18. 12:54

Q. 다음 코드를 실행하면 출력 결과로 5를 기대했는데 4가 출력되었습니다. 어디에서 잘못 작성된 것일까요?

int var1=5;
int var2=2;
double var3=var1/var2;
int var4=(int)(var3*var2);
System.out.println(var4);

 

cf . 참고

public class Solution01 {
    public static void main(String arg[]){
        int var1=5;
        int var2=2;
        //int 끼리 나눈 값은 int로 나눠진다. 즉 수학적으로는 5/2=2.5이지만 int타입은 소수점 이하는 버림으로 2가 나온다.
        double var3=var1/var2; //double var3 = 2.0
        int var4=(int)(var3*var2); //int var4 = (int)(2.0*2)
        System.out.println(var4); //var4 = 4
    }
}

 

Sol. 해결

sol1.

public class Solution01 {
    public static void main(String arg[]){
        int var1=5;
        int var2=2;
        //int 타입 끼리의 연산은 무조건 int 타입으로 반환한다.
        //자동 타입 변환은 피연산자 중 더 큰 범위인 타입으로 변하게 된다.
        //즉 int와 double중에는 double이 더 큰 범위를 가지고 있으므로 피연산자중 하나는 double 타입으로 강제 변환 시키는 것이 방법이다.
        double var3=(double)var1/var2; //double var3 = 2.5
        int var4=(int)(var3*var2); //int var4 = (int)(2.5*2)
        System.out.println(var4); //var4 = 5
    }
}

sol2.

public class Solution01 {
    public static void main(String arg[]){
        int var1=5;
        double var2=2.0;
        //앞서 말했듯 피연산자 중 하나는 실수 타입이면 되니까 변수 초기화를 할 때 double 타입을 사용해줘도 좋다.
        double var3=(double)var1/var2; //double var3 = 2.5
        int var4=(int)(var3*var2); //int var4 = (int)(2.5*2)
        System.out.println(var4); //var4 = 5
    }
}