업무를 진행 하면서 BigDecimal을 주로 사용하는데 사칙연산이 기본 int와 달라서 종종 헷갈려서 정리합니다.
BigdDecimal 사용
BigDecimal number = new BigDecimal("100.00010");
BigDecimal number2 = new BigDecimal("2.3110");
BigDecimal zero = BigDecimal.ZERO;
이런식으로 사용할 수 있습니다.
BigDecimal 사칙연산
- 더하기 : number.add(number2); =====> "102.31110"
- 빼기 : number.subtract(number2) =====> "97.6891"
- 나누기 : number.divide(number2) =====> "43.27135439203808"
[😈😈 이부분에서 에러가 날 것입니다. 이부분은 뒤에서 자세히 알아보겠습니다.]
- 곱하기 : number.multiply(number2) ======> "231.1002311"
BigDecimal 비교 ( .compareTo() 함수 )
사용법 ---> number.compareTo(number2);
앞에 나오는 number이 비교대상입니다.
비교대상이 같으면 0 return
비교대상이 더 작으면 -1 return
비교대상이 더 크면 1 return
divide함수 사용시 만날 수 있는 에러
CASE 1 : 0 을 0으로 나눈 경우
java.lang.ArithmeticException: Division undefined
위와 같은 에러가 나올 것 입니다.
해결 방법
0 값을 회피 하도록 합시다.
ex) if 문 사용
CASE 2 : 나누기 자릿수를 지정해주지 않은 경우
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result
위와 같은 에러가 나오는 경우
해결 방법
====> number.divide(number2 , 소수점 자릿수, 소숫점 마지막 자리 처리);
올림 - BigDecimal.ROUND_UP
버림 - BigDecimal.ROUND_DOWN
반올림 - BigDecimal.ROUND_HALF_UP
반내림 - BigDecimal.ROUND_HALF_DOWN
위와 같은 양식으로 함수를 이용해야 합니다!
참고 사이트 😍
https://epjang.tistory.com/47
https://forgiveall.tistory.com/547