해당 게시물은 [제대로 파는 자바 (Java) - by 얄코]를 수강한 내용을 바탕으로 작성하였습니다.
실수 자료형의 크기와 범위
자료형 |
크기 |
float |
4바이트 |
double |
8바이트 |
▶ double이 float보다 단순히 범위가 넓은 것이 아니라, 보다 정밀하게 표현 가능
최소 절대값이 float보다 double이 더 작으므로 double이 더 작은 수를 표현 가능하며 더 많은 자릿수로 정밀하게 표현 가능하다
▶ float은 f 또는 F를 붙여 표현해야 함
// float은 뒤에 f 또는 F를 붙여 표현 (안 붙이면 자바는 기본적으로 double로 인식함)
float flt1 = 3.14f;
double dbl1 = 3.14;
// ⚠️ float에는 double을 담을 수 없음
// float flt2 = dbl1; //불가!!!
float flt2 = (float) dbl1; //하려면 double을 float으로 형변환해야함
// 반대는 가능
double dbl2 = flt1;
▶ 실수 자료형에 정수를 대입하면 묵시적 변환됨
4바이트 실수 자료형 float에도 8바이트 정수 자료형 long 값을 담을 수 있으며 해당 정수의 값이 한도를 넘어서 큰 경우에는 float보다 double이 더 정확하게 나타내는 것을 알 수 있음
▶ float과 double의 연산은 double을 반환함
// float과 double의 연산은 double 반환
// float flt04 = flt01 + dbl01; // ⚠️ 불가
double flt04 = flt01 + dbl01;
▶ 부동 소수점 방식 상 실수 간 연산 시 오차가 자주 발생함
→ BigDecimal 클래스를 사용하여 해결 가능
정확한 값을 갖지 않고 오차를 보임
▶ 정수 자료형과 실수 자료형의 계산은 실수를 반환함
// 💡 정수 자료형과 실수 자료형의 계산은 실수 반환
// int flt2 = int1 / flt1; // ⚠️ 불가
float flt2 = int1 / flt1;
// 또는
// double flt2 = int1 / flt1;
▶ 리터럴로 작성 시 double임을 명시하려면 .0을 붙여줘야 함
정수 자료형끼리의 나누기 시 나머지를 버리고 정수가 double로 묵시적 변환되어 dbl5값이 2.0이 되었으므로 나눠지는 수 또는 나누는 수에다가 .0을 붙이면 double의 나누기 연산을 함
▶ 실수를 정수 자료형에 강제로 넣으면 소수부를 버림
실수를 정수 자료형으로 형변환한 결과 소수부를 버린 것을 볼 수 있음
▶ 정수/실수간, 다른 숫자 자료형간 사용 가능
int, float, double끼리 비교 연산이 가능한 것을 볼 수 있음