publicclassDevAndy{ publicstaticvoidmain(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
publicclassDevAndy{ publicstaticvoidmain(String[] args){ int num1 = 10; int num2 = 30; System.out.println((double)num1/num2); } }
1
0.3333333333
연산을 할 때, double형을 명시적으로 형변환하면, double과 int형의 연산이기 때문에 연산의 결과도 자료형 크기가 큰 double에 담겨지게 된다. (int형 크기: 4 bytes, double형 크기: 8 bytes)
그러나 원하는 값이 소수점 2자리까지만 원한다면 String 클래스의 format()을 이용해서 만들어낼수 있다.
1 2 3 4 5 6 7 8 9 10
publicclassDevAndy{ publicstaticvoidmain(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.33333과 0.33은 다른값이기 때문이다.