Language/Java
[Java] Double의 제한사항
p8labs
2021. 12. 11. 16:35
728x90
반응형
double의 제한사항
- 이건 Java 뿐만 아니라 C, C++ 대부분의 언어에서 발생한다.
- double 을 사용하다보면 문제가 발생 하는 경우가 있다.
- double 은 유효숫자가 13 자리 이다.
- 유효숫자(Significant figures)는 수의 정확도에 영향을 주는 숫자이다.
- 15개 의 숫자까지만 정확한 수를 표현 할 수 있다는 것이다.
- 유효숫자 관련 링크 https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%9A%A8%EC%88%AB%EC%9E%90
double의 문제점 예제 1
double doubleTestA1 = 12.1111111111111112;
double doubleTestB1 = 2;
double result = doubleTestA1 * doubleTestB1;
System.out.println("doubleTestA1: " + doubleTestA1);
System.out.println("doubleTestB1: " + doubleTestB1);
System.out.println("result: " + result);
결과
- 분명 doubleTestA1 의 값은 12.1111111111111112 이다.
- 하지만 값이 잘린다.
- result 값 역시 마지막 2가 잘리고 계산이 되었다.
doubleTestA1: 12.11111111111111
doubleTestB1: 2.0
result: 24.22222222222222
double의 문제점 예제 2
double doubleTestA1 = 12.1111111111111125;
double doubleTestB1 = 2;
double result = doubleTestA1 * doubleTestB1;
System.out.println("doubleTestA1: " + doubleTestA1);
System.out.println("doubleTestB1: " + doubleTestB1);
System.out.println("result: " + result);
결과
- 역시나 원한는 값이 아니다.
- double 이 정밀도를 표현할수 있는 수를 넘었기 때문이다.
doubleTestA1: 12.111111111111112
doubleTestB1: 2.0
result: 24.222222222222225
결론
- 제한사항이라고 쓴것은 잘못된 것 아니다.
- 사용자가 잘 알고써야 되기 때문이다.
- 큰 숫자 소수점을 사용하는 프로젝트에서는 반드시 BigDecimal 을 쓰도록하자.
BigDecimal
https://vprog1215.tistory.com/287
728x90
반응형