brunch

You can make anything
by writing

C.S.Lewis

by 이승현 Aug 13. 2018

Effective Java - 프로그래밍 일반

#48 정확한 계산에는 float나 double 타입을 쓰지 말자

Effective Java - 프로그래밍 일반


#48 정확한 계산에는 float나 double 타입을 쓰지 말자


Java에서 float와 double 타입은 애초에 과학 계산과 공학 계산을 위해 설계되었습니다.

그리고 넓은 범위의 수에 대해 정확한 근사치를 빨리 산출하기 위한 이진 부동소수점 연산을 수행합니다.


따라서 근사치가 아닌 정확한 결과가 필요하다면, float와 double은 쓰면 안 됩니다.

특히 돈과 관련된 부분에서는 절대 쓰면 안 됩니다ㅠ




예를 들면 아래와 같은 코드의 결과는 "0.61"이 아닌, "0.6100000000000001"이 출력됩니다.

System.out.println(1.03 - .42);

정확한 계산을 위해서는 BigDecimal을 이용할 수 있습니다. (결과 "0.61")

BigDecimal bigDecimal = new BigDecimal("1.03");
BigDecimal bigDecimal2 = new BigDecimal("0.42");
System.out.println(bigDecimal.subtract(bigDecimal2));


하지만 BigDecimal은 실행 속도가 느리고 연산자가 아닌 함수를 이용해서 계산하기 때문에 더 복잡합니다.

따라서 근사치가 아닌 정확한 결과가 필요한 계산에서는 float나 double을 쓰지 말고, 실행 속도가 느리지만 정확한 BigDemical을 이용해야 합니다.

만약 소수점을 직접 계산할 수 있다면 int나 long을 이용할 수 있습니다.

int a = 103;
int b = 42;
System.out.println((float) (a - b) / 100);


매거진의 이전글 Effective Java - 프로그래밍 일반
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari