-
자바의 정석 3판 _ 연습문제 02~03 오답 정리Language/Java 2023. 11. 23. 00:09
연습문제와 해답 출처 : 자바의 정석 저자 GitHub
자료형의 크기
자료형 / 크기 1 byte 2 byte 4 byte 8 byte 논리형 boolean 문자형 char 정수형 byte short int long 실수형 float double 참조자료형 Object - 모든 참조 자료형의 크기는 4 Byte
- 정수 자료형의 표현 범위 byte는 1byte 크기를 갖기때문에 byte에 담을 수 있는 정수 값의 범위는 2⁸ = -128 ~ 127
- char와 short는 둘다 2byte로 같은 크기를 갖지만, char는 문자 표현 자료형이고, short는 정수 표현 자료형으로, 값의 표현 범위가 다르다. 문자 표현을 하는 char은 0~2¹⁶-1 까지를 표현 할 수 있지만, shot는 음수와 양수를 모두 표현하기 때문에, -2⁸ ~ 2⁸-1 범위의 숫자만 표현을 할 수 있다.
Math.round()를 사용하지 않고 소수점 셋째자리에서 반올림
다음에 주어진 화씨를 섭씨로 변환하는 코드를 마저 작성하여 소수점 셋째자리에서 반올림되는 결과값을 출력하시오. * 화씨를 섭씨로 변환하는 공식 =
C = 5/9 * (F - 32)
class Exercise3_7 { public static void main(String[] args) { int fahrenheit = 100; float celcius = System.out.println("화씨 : " + fahrenheit); System.out.println("섭씨 : " + celcius); } }
해설
화씨를 섭씨로 변환하는 공식은 "5/9f * (fahrenheit - 32)" 이다. 여기에서 소수점 셋째자리에서 반올림을 하려면 다음의 과정을 거쳐야 한다. 1. 값에 100을 곱한다. 37.77778 * 100 = 3777.778 2. 1의 결과에 0.5를 더한다. 3777.778 + 0.5 = 3778.278 3. 2의 결과를 int 타입으로 변환한다. (int)3778.278 = 3778 4. 3의 결과를 100f로 나눈다. 3778/100f = 37.78 따라서 celcius에 들어갈 문장은 " (int)((5/9f * (fahrenheit - 32) * 100) + 0.5)/100f "
boolean 비교연산자의 결과값이 올바르도록 수정하시오
문제
float f2 = 0.1f; double d = 0.1; boolean result = d==f2;
해설
비교연산자도 이항연산자이므로 연산 시 두 피연산자의 타입을 맞추기 위해 형변환이 발생한다. 그래서 double과 float의 연산은 double과 double의 연산으로 자동 형변환 되는데, 실수는 정수와 달리 근사값으로 표현을 하기 때문에 float을 double로 형변환했을 때 오차가 발생할 수 있다. 그래서 float 값을 double로 형변환하기 보다는, double값을 유효자리수가 적은 float으로 형변환해서 비교하는 것이 정확한 결과를 얻는다.
'Language > Java' 카테고리의 다른 글
SQLite (0) 2023.11.25 Stream_3: 중간 연산자 (0) 2023.11.25 Stream_2: 시작 연산자 (0) 2023.11.25 Stream_1: 소개 (0) 2023.11.25 코딩테스트용 프로젝트 템플릿!! 😆 (0) 2023.11.21