Int형 나누기 결과를 소수점 2자리까지만 얻어오기

1
2
3
4
5
6
7
8
public class DevAndy {
public static void main(String[] args){
int num1 = 10;
int num2 = 30;

System.out.println(num1/num2);
}
}
1
0

int형 데이터끼리 나누기 연산을 하면, 결과 또한 int형 자료형에 결과값이 담겨지는데 이 때 예상한 값과 다른 값이 담기게 된다. 따라서 명시적 형변환을 통해서 원하는 값을 출력하려고 한다.

1
2
3
4
5
6
7
8
public class DevAndy {
public static void main(String[] args){
int num1 = 10;
int num2 = 30;

System.out.println((double)num1/num2);
}
}
1
0.3333333333

연산을 할 때, double형을 명시적으로 형변환하면, doubleint형의 연산이기 때문에 연산의 결과도 자료형 크기가 큰 double에 담겨지게 된다. (int형 크기: 4 bytes, double형 크기: 8 bytes)

그러나 원하는 값이 소수점 2자리까지만 원한다면 String 클래스의 format()을 이용해서 만들어낼수 있다.

1
2
3
4
5
6
7
8
9
10
public class DevAndy {
public static void main(String[] args){
int num1 = 10;
int num2 = 30;
double result = (double)num1/num2;
String formattedResult = String.format("%.2f", result);

System.out.println(formattedResult);
}
}
1
0.33

소수점 2자리까지만 잘라서 출력하긴 했지만, 이 값의 자료형은 double이 아니라 String이라는 사실을 유의해야한다. 이 값은 그저 출력을 위한 값일뿐이지, 연산을 위한 값으로는 적절치 않다. 문자열 데이터기 때문에 연산이 가능하지 않을뿐더러 0.333330.33은 다른값이기 때문이다.

따라서 String 클래스의 포맷팅을 하려면, 연산을 마무리하는 시점에 해야할 것 같다.

출처 : Live Study 2주차 - 자바 데이터 타입, 변수 그리고 배열