일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 뮌헨 맛집
- 정적분석
- Oracle
- 클리닝스틱 가격
- 동해 게스트하우스
- TMRecovery
- 아이코스 클리닝스틱
- 클리닝스틱 구매
- 소나큐브
- 레이싱시트
- 설치
- 103LAB
- ptree
- DB계정락
- Radler
- java
- SonarScanner
- 소스코드 정적분석
- 아이코스 청소
- 조용한 게스트하우스
- 클리닝스틱
- 가상 광 디스크
- 동해
- playseat challenge
- pfiles
- 소나스캐너
- KARMOR
- sqlite-jdbc
- 경포가시연습지
- 플레이시트 챌린지
- Today
- Total
티끌모아부자
[java] BigDecimal 연산과 비교 본문
java에서는 부동소수점 연산시 부정확성때문에 정확한 실수 계산을 위해 BigDecimal을 지원한다.
비록 performance는 double,float등 보다 떨어지지만 프로그램 성격에 따라
정확한 부동소수점 연산이 필요하다면 BigDecimal을 사용한다.
Float과 BigDecimal 연산 Sample코드와 결과를 확인해보자.
java
실행결과
첫 번째로 float의 덧셈연산을 살펴보자.
소수점 7자리에서 계속에서 오차가 누적되는 것을 볼 수 있다.
두 번째로 BigDecimal이지만 객체 생성시 숫자를 입력하여 생성하였다.
대략 소수점 16~17번째 자리에서 눈에 띄게 오차가 발생한다.
세 번째로 BigDecimal 선언시 String형태로 선언하여주었다.
오차없이 정확한 연산을 지원하는 것을 볼 수 있다.
네 번째로 String형태로 선언한 BigDecimal, 숫자형태로 선언한 BigDecimal을 더하면?
더하는 BigDecimal이 부정확한 숫자여서 오차가 누적되는 것을 볼 수 있다.
정리
결과적으로 BigDecimal 연산에서는 숫자형태로 초기화하는 것이 아니라 String형태로 초기화하는 것이 정확한 연산을 할 수 있다.
BigDecimal을 쓰는 목적이 부동소수점 오차를 발생시키지 않기 위함이므로 BigDecimal 사용시 주의하는 것이 좋을 것 같다.
그렇다면 BigDecimal의 비교방법은 어떻게 될까?
1. ==
2. equals
3. compareTo
어느정도 예상이 되는 결과이지만 다시 한번 환기를 해보면.....!
java
실행결과
'IT-JAVA > JAVA' 카테고리의 다른 글
[java] try-catch에서 exception과 throwable (1) | 2017.07.18 |
---|---|
[java] XML Document Parsing(수신) (0) | 2017.03.21 |
[java] Properties 설정파일 사용하기 (0) | 2017.03.21 |
[java] URLClassLoader, 파일시스템에 있는 클래스파일 로드 (0) | 2017.03.21 |
[java] Generic 정보 얻기! (Reflection - ParameterizedType) (0) | 2017.03.20 |