본문 바로가기
Effective Java

[Effective Java] 아이템60 정확한 답이 필요하다면 float와 double은 피하라

by byeongoo 2021. 7. 23.

■ float과 double은 정확하지 않을 수 있다.

float과 double 타입은 과학과 공학 계산용으로 설계되었다. 이진 부동소수점 연산에 쓰이며, 넓은 범위의 수를 빠르게 정밀한 근사치로 계산하도록 세심하게 설계되었다. 

 

그렇기 때문에 float과 double은 특히 금융 계산과는 맞지 않는다. 금융 계산은 BigDecimal, int 혹은 long을 사용해야한다. 

 

BigDecimal의 아쉬운점으로는 기본 타입보다 사용하기가 훨씬 불편하고 느리다는 점이있다. 

 

■ 핵심 정리

  • 정확한 계산이 필요한 경우 float나 double은 피하라
  • 코딩 시의 불편함이나 성능 저하를 신경 쓰지 않겠다면 BigDecimal을 사용하라
  • BigDecimal이 제공하는 여덝 가지 반올림 모드를 이용하여 반올림을 완벽히 제어할 수 있다. 반올림 기능을 이용할 경우 편리하다.
  • 성능이 중요하고 소수점을 직접 추적할 수 있고 숫자가 크지 않다면 int나 long을 사용하라 아홉자리 십진수로 표현할 수 있다면 int, 열여덝 자리 십진수로 표현할 수 있다면 long을 사용하고 18자리가 넘어가면 BigDecimal을 사용하라