9장. 일반적인 프로그래밍 원칙
float, double 대신 BigDemical이나 int/ long을 사용하라
float과 double타입은 과학, 공학 계산용으로 설계되었다.
이진 부동소수점 연산에 쓰이고, 넓은 범위의 수를 빠르게 정밀한 '근사치'로 계산하도록 설계되었다.
따라서 정확한 결과가 필요할 때는 사용하면 안 된다.
System.out.println(1.03 - 0.42); //0.6100000000001
System.out.println(1.00 - 9*0.10); //0.09999999999999998
위와 같이 doule, float형은 정확한 수치 계산 결과를 내놓을 수 없다.
이를 해결하기 위해서는 BigDemical 또는 int, long을 사용해야 한다.
BigDemical의 단점?
기본 타입보다 쓰기가 훨씬 불편하고, 훨씬 느리다.
int, long?
다룰 수 있는 값의 크기가 제한되고, 소수점을 직접 관리해야 한다.
달러/센트 계산의 경우, 모든 계산을 달러 대신 센트로 수행하면 이 문제가 해결된다.
소수점 추적은 시스템에 맡기고, 코딩 시의 불편함이나 성능 저하를 신경쓰지 않겠다면 BigDemical을 사용하라.
반면, 성능이 중요하고 소수점을 직접 추적할 수 있고, 숫자가 너무 크지 않다면 int나 long을 사용하라.
숫자를 9자리 십진수로 표현할 수 있다면 int, 열여덟자리 십진수로 표현할 수 있다면 long, 그 이상 넘어가면 BigDemical을 사용해야 한다.
'Effective Java' 카테고리의 다른 글
[9장] Item 61. 박싱된 기본 타입보다는 기본 타입을 사용하라 (0) | 2022.07.29 |
---|---|
[9장] Item 59. 라이브러리를 익히고 사용하라 (0) | 2022.07.26 |
[9장] Item 58. 전통적인 for문보다는 for-each문을 사용하라. (0) | 2022.07.24 |
[9장] Item 57. 지역변수의 범위를 최소화하라 (0) | 2022.07.24 |
[2장] Item 1. 생성자 대신 정적 팩토리 메소드를 고려하라 (0) | 2022.07.23 |