소수점이 있는 숫자를 저장하는 타입. IEEE 754 표준에 따라 실수를 부동 소수점(Floating-point) 방식으로 메모리에 저장
| 타입 | 메모리 크기 | 소수점 이하 정밀도 | 데이터 표현 범위 |
|---|---|---|---|
| float | 4 bytes (32 bits) | 약 7자리 | $1.4 \times 10^{-45} \sim 3.4 \times 10^{38}$ |
| double | 8 bytes (64 bits) | 약 15자리 | $4.9 \times 10^{-324} \sim 1.8 \times 10^{308}$ |
double 타입으로 간주double은 float보다 약 2배 이상의 정밀도를 가지기 때문에, 정확한 계산이 필요한 현대 프로그래밍에서는 주로 double을 사용double과 구분하기 위해 리터럴 뒤에 소문자 f나 대문자 F를 반드시 붙인다.float var1 = 3.14f;
double var2 = 3.14; // 기본이 double이므로 접미사 생략 가능
double var3 = 3e6; // 3 * 10^6 = 3000000.0
double var4 = 2e-3; // 2 * 10^-3 = 0.002
실수 타입은 정수 타입과 달리 0.1과 같은 값을 이진수로 변환할 때 무한 소수가 발생하는 경우가 많다. 컴퓨터는 이를 유한한 비트 수 안에 담기 위해 근사치로 저장한다.
주의: 따라서 금융 계산처럼 아주 정밀한 계산이 필요한 경우에는 float나 double 대신 BigDecimal 클래스를 사용한다. 0.1을 10번 더했을 때 정확히 1.0이 나오지 않을 수 있기 때문이다.
연산 과정에서 잘못된 값이 입력될 때 발생하는 특수한 상태
5 / 0.0)5 % 0.0)Double.isInfinite()나 Double.isNaN() 메소드로 체크할 수 있음