Free Lines Arrow
본문 바로가기
Language/Java

[Java] Double의 제한사항

by skahn1215 2021. 12. 11.
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

댓글