folat와 double 타입은 넓은 범위의 수를 빠르게 정밀한 근사치로 계산하도록 세심하게 설계됐다. 따라서 정확한 결과가 필요할 때는 사용하면 안된다. 특히 float와 double은 금융 관련 계산과는 맞지 않는다. 0.1 혹은 10의 음의거듭 제곱 수를 표현할 수 없기 때문이다.
금융 계산에는 BigDecimal
, int
, long
을 사용해야 한다. BigDecimal
은 8가지 반올림 모드를 이용해 반올림을 완벽히 제어할 수 있다. 법으로 정해진 반올림을 수행해야 하는 비즈니스 계산에서는 아주 편리한 기능이다. 하지만, BigDecimal
에는 두 가지 단점이 있다. 기본 타입보다 쓰기가 훨씬 불편하고, 훨씬 느리다는 점이다. 단발성 계산이라면 문제 없지만 쓰기 불편하다는 점은 못내 아쉬울 것이다.
BigDecimal
의 대안으로 int
, long
타입을 쓸 수도 있다. 그럴 경우 다룰 수 있는 값의 크기가 제한되고, 소수점을 직접 관리해야만 한다. 숫자를 아홉 자리 십진수로 표현할 수 있다면 int
를, 열여덟 자리 십진수로 표현할 수 있다면 long
, 그 이상은 BigDecimal
을 사용해야 한다.