BigDecimal 을 사용할 때는
BigDecimal 은 우리가 흔히 사용하는 기호(+, -)로 사칙연산을 할 수 없다.
사칙연산
사칙연산을 할 때는
add, subtract, multiply, divide 함수를 활용해 계산한다.
BigDecimal number1 = new BigDecimal("250.125");
BigDecimal number2 = new BigDecimal("150.352");
System.out.println("더하기 : " + number1.add(number2));
System.out.println("빼기 : " + number1.subtract(number2));
System.out.println("곱하기 : " + number1.multiply(number2));
나누기는 위에와 같이 단순하게 계산하면 아래와 같은 에러 메시지가 생긴다.
Non-terminating decimal expansion; no exact representable decimal result.
나누기를 계산할 때는 소수점 처리를 해주어야 한다.
BigDecimal number1 = new BigDecimal("250.125");
BigDecimal number2 = new BigDecimal("150.352");
System.out.println("나누기 : " + number1.divide(number2, BigDecimal.ROUND_UP));
System.out.println("나누기 : " + number1.divide(number2, BigDecimal.ROUND_DOWN));
System.out.println("나누기 : " + number1.divide(number2, BigDecimal.ROUND_HALF_UP));
System.out.println("나누기 : " + number1.divide(number2, BigDecimal.ROUND_HALF_DOWN));
System.out.println("나누기 : " + number1.divide(number2, 4, BigDecimal.ROUND_UP)); //소수점 4자리까지 표시
System.out.println("나누기 : " + number1.divide(number2, 4, BigDecimal.ROUND_DOWN)); //소수점 4자리까지 표시
System.out.println("나누기 : " + number1.divide(number2, 4, BigDecimal.ROUND_HALF_UP)); //소수점 4자리까지 표시
System.out.println("나누기 : " + number1.divide(number2, 4, BigDecimal.ROUND_HALF_DOWN)); //소수점 4자리까지 표시
소수점 처리 방법
- BigDecimal.ROUND_UP : 올림
- BigDecimal.ROUND_DOWN : 버림
- BigDecimal.ROUND_HALF_UP : 반올림 ( 5 이상 올림 )
- BigDecimal.ROUND_HALF_DOWN : 반내림 ( 5 이하 내림 )
BigDecimal number1 = new BigDecimal("250.125");
System.out.println(number1.setScale(2, BigDecimal.ROUND_UP)); // 올림
System.out.println(number1.setScale(2, BigDecimal.ROUND_DOWN)); // 버림
System.out.println(number1.setScale(2, BigDecimal.ROUND_HALF_DOWN)); // 반올림
비교하기
BigDecimal 은 compareTo 함수를 사용해 비교한다.
일반적인 부등호로 사용하는 비교 연산자로는 비교할 수 없다.
BigDecimal number1 = new BigDecimal();
BigDecimal number2 = new BigDecimal();
number1.compareTo(number2)
number1 이 number2 보다 크면 1
number1 이 number2 보다 작으면 -1
number1 이 number2 보다 같으면 0
반응형
'공부 > Spring' 카테고리의 다른 글
[JPA] @Embedded, @Embeddable (0) | 2022.09.14 |
---|---|
[JPA] 최범균님 <JPA 기초> 내용 정리하기 (0) | 2022.09.07 |
[java] BigDecimal error : Non-terminating decimal expansion; no exact representable decimal result. (0) | 2022.05.15 |
Connection Factory (0) | 2022.05.13 |
Reactive Streams (0) | 2022.04.16 |