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
반응형
'프로그래밍 노트 > Effective 시리즈' 카테고리의 다른 글
익명 클래스보다는 람다를 사용하라. (0) | 2019.12.26 |
---|---|
규칙4. 객체 생성을 막을 때는 private 생성자를 사용하라 (0) | 2018.11.29 |
규칙3. private 생성자나 enum 자료형은 싱글턴 패턴을 따르도록 설계하라 (0) | 2018.11.26 |
규칙1. 생성자 대신 정적 팩터리 메서드를 사용할 수 없는지 생각해 보라 (0) | 2018.11.26 |
규칙49. 객체화된 기본 자료형 대신 기본 자료형을 이용하라 (0) | 2018.11.14 |