Programming/Java

[Java] BigDecimal 사용법 및 예제 - 연산, 형변환, 비교

코딩무니 2022. 6. 12. 10:19
728x90
반응형

Java - BigDecimal 사용법 및 예제

 

최근 금융관련 프로젝트를 진행하면서 금액관련 정확한 연산을 위해 BigDecimal을 사용한 적이 있다.

오늘은 정말 간만에 BigDecimal 관련해서 기록할 것이다.

 

 

💡 BigDecimal 사용하는 이유

 

Java에서는 소수점을 저장할 수 있는 float과 double이라는 타입이 존재한다. 하지만 이 2가지 type의 경우는 소수점의 정밀도가 완벽하지 않아 값의 오차가 생길 여지가 존재한다. 

 

이유는 내부적으로 수를 저장할 때 이진수의 근사치를 저장하기 때문이라고 한다. 

 

때문에 이번 금융프로젝트는 돈과 이율 등 과 관련이 높기 때문에 미세한 숫자의 변동도 허용해서는 안되기 때문에 BigDecimal을 사용한다.

 

 

💡 BigDecimal 사용법

 

기본적으로 BigDecimal은 문자열이기 때문에 사칙연산이 되지 않는다.

그래서 BigDecimal연산을 할 때에는 아래와 같이 BigDecimal 메서드를 사용한다.

 

BigDecimal 선언 및 연산

/* BigDecimal 선언 */
BigDecimal bd1 = new BigDecimal("123.12345");
/* BigDecimal 선언 */
BigDecimal bd1 = new BigDecimal("10000.1234567");
BigDecimal bd2 = new BigDecimal("100000");

/* BigDecimal 연산 */
System.out.println("더하기 add : " + bd1.add(bd2));
System.out.println("빼기 subtract : " + bd1.subtract(bd2));
System.out.println("곱하기 multiply : " + bd1.multiply(bd2));
System.out.println("나누기 divide : " + bd1.divide(bd2));
System.out.println("나머지 remainder : " + bd1.remainder(bd2));

 

 

BigDecimal 타입(형) 변환

BigDecimal bd = new BigDecimal("10000.1234567");

bd.toString();		//BigDecimal to String
bd.intValue();		//BigDecimal to int
bd.longValue();		//BigDecimal to long
bd.floatValue();	//BigDecimal to float
bd.doubleValue();	//BigDecimal to double

System.out.println("String BigDecimal : " + bd.toString());
System.out.println("int BigDecimal : " + bd.intValue());
System.out.println("Long BigDecimal : " + bd.longValue());
System.out.println("Float BigDecimal : " + bd.floatValue());
System.out.println("Double BigDecimal : " + bd.doubleValue());

 

 

BigDecimal 비교

BigDecimal bd1 = new BigDecimal("9999.12333");
BigDecimal bd2 = new BigDecimal("9999.12222");

/* compareTo
 * bd1 = bd2 -> 0  return 
 * bd1 > bd2 -> 1  return
 * bd1 < bd2 -> -1 return
 */
int compateRtn = bd1.compareTo(bd2);
System.out.println(compateRtn);

BigDecimal은 두 수를 compareTo라는 메서드를 사용해 비교할 수 있다.

위 코드박스에 설명은 있지만 쉽게 말해 같으면 0, 전달되는 인자가 작으면 1, 전달되는 인자가 크면 -1이 return된다.

 

728x90
반응형