Today
-
Yesterday
-
Total
-
  • 자바의 정석 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  
    1. 모든 참조 자료형의 크기는 4 Byte
    2. 정수 자료형의 표현 범위 byte는 1byte 크기를 갖기때문에 byte에 담을 수 있는 정수 값의 범위는 2⁸ = -128 ~ 127
    3. 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

Designed by Tistory / Custom by 얼거스