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
반응형
'Language > Java' 카테고리의 다른 글
[Java] Generic 기초 (0) | 2022.06.11 |
---|---|
[Java] String to LocalDateTime (0) | 2022.02.12 |
[Java] BigDecimal (2) | 2021.12.11 |
[Java] Generic Type Erasure (0) | 2021.10.29 |
[Java] HashMap, hashCode(), equals() (0) | 2021.09.06 |
댓글