본문 바로가기
백엔드/Spring

[java] BigDecimal 사칙연산(더하기, 빼기, 나누기, 곱하기), 비교(compareTo)

by 작은소행성 2022. 5. 16.

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 

 

반응형