프로그래밍 노트/Effective 시리즈

규칙48. 정확한 답이 필요하다면 float와 double은 피하라

깡냉쓰 2018. 11. 14. 20:28
728x90
반응형

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


flat와 double 형은 기본적으로 과학 또는 엔지니어링 관련 계산에 쓰일 목적으로 설계된 자료형이다.

이 자료형들은 이진 부동 소수점 연산을 수행하는데, 이것은 넓은 범위의 값에 대해 정확도가 높은 근사치를 제공하지만 정확한(exact) 결과를 제공하지 않기 때문에 정확한 결과가 필요한 곳에서는 사용하면 안된다 (특히 돈과 관계된 계산)

float이나 double로는 0.1 을 비롯한 10의 음의 거듭제곱 수(10^-1, 10^-2 등등)을 정확하게 나타낼 수 없기 때문이다.

 
public static void main(String[] args){
    System.out.println(1.03-0.42);
    System.out.println(1.00 - 9 * 0.1);
}
 

위와 같이 실행시 아래와 같은 결과가 나온다.

0.6100000000000001
0.09999999999999998​

 

이러한 문제를 해결 하려면 돈계산을 할 때는 BigDecimal, int 또는 long을 사용해야 한다.

BigDecimal의 문제점 => 기본 산술연산자 자료형보다 사용이 불편하며, 느리다.

 

BigDecimal 대안으로 int 나 long을 사용할 수 있다.

관계된 수치들이 십진수 아홉 개 이하로 표현이 가능할 때 int,

18개 이하로 표현 가능할 때 long,

그이상일 때 BigDecimal을 사용할 수 있다.

728x90
반응형