Search

아이템60 : 정확한 답이 필요하다면 float와 double은 피하라

 float와 double 타입

 어떤 용도로 쓰일까?

float와 double 타입은 과학/공학 계산용으로 설계되었다.
이진 부동소수점 연산에 쓰인다.
넓은 범위의 수를 빠륵 정밀한 ‘근사치’로 계산하도록 설계되었다.

 어떤 문제점이 있을까?

정확한 결과가 필요할 때 사용할 수 없다.
특히 금융 관련 계산이라면 더욱 맞지 않는다.
0.1 혹은 10의 음의 거듭 제곱수를 표현할 수 없다.
반올림을 해도 틀린 답이 나올 수 있다.

 float와 double 타입의 문제는 어떻게 해결할 수 있을까?

금융 계산에는 BigDecimal, int, long을 사용하여 해결할 수 있다.
BigDecimal은 단점이 존재한다.
기본 타입보다 사용하기 훨씬 불편하다.
기본 타입보다 훨씬 느리다.
int나 long도 단점이 존재한다.
다룰 수 있는 값의 크기가 제한된다.
소수점을 직접 관리해야 한다.

 핵심 요약

정확한 답이 중요하다면 float와 double은 피하자.
불편함과 성능 저하를 감수할 수 있다면 BigDecimal을 사용하자.
여덟 가지 반올림 모드로 반올림을 완벽히 제어 가능하다.
법으로 정해진 반올림을 수행하는 비지니스 계산에는 편리하다.
성능이 중요하고, 소수점을 직접 추적할 수 있고, 숫자가 너무 크지 않다면 int나 long을 사용하자.
아홉 자리 십진수라면 → int
열여덟 자리 십진수라면 → long
이를 넘어가면 → BigDecimal