반응형
Double 타입의 변수 a와 b에 0.1, 0.2를 넣고 더해봤더니
0.1 + 0.2인데 0.3이 나오는 것이 아니라
0.30000000000000004 가 나오는 것이 보인다
이게 뭐지? 버근가? 싶을텐데
컴퓨터는 모든 숫자를 0과 1로만(2진법) 표현할 수 있기 때문에
소수도 0과 1로 표현하는 과정에서 저렇게 오차가 나는 것이다
각종 프로그래밍 언어에서는 소수를 표현할 때
IEEE 754 부동 소수점 방식으로 소수를 표현하게 되는데
다른 방식인 고정 소수점 방식과 비교해 보자면
고정 소수점 방식은 소수를 정확하게 표현하지만
그 범위가 얼마 되지 않아
범위가 훨씬 넓은 IEEE 754 부동 소수점 방식을 사용하는데
부동 소수점 방식은 범위가 넓은 대신
값이 정확하게 떨어지지 않고
근사치만 제공해주게 된다
그래서 0.1 + 0.2를 해도 0.3이 아닌
0.3000~4가 떨어지게 되는 것이다
근데 값이 저렇게 나오는데 어떻게 소수를 사용하냐면
소수점을 보정해주는 BigDecimal을 사용해주면 된다
마지막으로 예제에 사용한 코드는 아래와 같다
import java.math.BigDecimal;
public class PlusExample {
public static void main(String[] args) {
Double a = 0.1;
Double b = 0.2;
// BigDecimal에 숫자 넣을때에는 문자로 넣을 것
BigDecimal c = new BigDecimal(String.valueOf(a));
BigDecimal d = new BigDecimal(String.valueOf(b));
System.out.println("BigDecimalValue : " + c.add(d));
System.out.println("Double Value : " + (a + b));
}
}
반응형
'기타 개념정리' 카테고리의 다른 글
카멜케이스 표기법 사용법 및 예제 (0) | 2020.03.17 |
---|---|
헝가리안 표기법 설명 및 예제 (0) | 2020.03.17 |
데이터베이스 인덱싱이란? (0) | 2020.02.26 |
그리드 텍스트 왼쪽, 가운데, 오른쪽 정렬 기준 (0) | 2020.02.18 |
프레임워크가 뭔말? (0) | 2020.02.06 |
댓글