자바의 정석 3판 _ 연습문제 02~03 오답 정리

김아무개·2023년 3월 30일
0

Java

목록 보기
2/23

연습문제와 해답 출처 : 자바의 정석 저자 GitHub

자료형의 크기

자료형 / 크기1 byte2 byte4 byte8 byte
논리형boolean
문자형char
정수형byteshortintlong
실수형floatdouble
참조자료형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;

해설

비교연산자도 이항연산자이므로 연산 시 두 피연산자의 타입을 맞추기 위해 형변환이 발생한다.
그래서 doublefloat의 연산은 doubledouble의 연산으로 자동 형변환 되는데,
실수는 정수와 달리 근사값으로 표현을 하기 때문에 floatdouble로 형변환했을 때 오차가 발생할 수 있다.
그래서 float 값을 double로 형변환하기 보다는, 
double값을 유효자리수가 적은 float으로 형변환해서 비교하는 것이 정확한 결과를 얻는다.
profile
Hello velog! 

0개의 댓글