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
}
}
'📖혼자공부하는자바' 카테고리의 다른 글
Hanghae Solution [Math.random()] (0) | 2022.11.18 |
---|---|
Hanghae Solution [증감 연산자] (0) | 2022.11.18 |
Chapter 04-2 Math.random() (0) | 2022.11.13 |
Chapter 04-1 조건문 (0) | 2022.11.13 |
Chapter 03-1 연산자 (0) | 2022.11.12 |