본문 바로가기
개발/Java

[Java] BigDecimal 알아보기 double, float 과의 차이

by yo.na 2023. 5. 26.

코드분석을 하다가 BigDecimal을 보게 되었어요
double, float은 많이 봤지만 BigDecimal은 익숙하지 않아서 무슨 차이가 있는지 알아보았습니다. 

 

 

✔  BigDecimal 개념

 

BigDecimal은 정확한 십진수 연산을 제공하는 Java의 클래스입니다. BigDecimal은 임의의 정밀도를 가지며, 실수를 소수점 이하의 숫자로 정확하게 표현할 수 있습니다. BigDecimal은 정확성을 우선시하기 때문에 숫자를 나타내는 데 있어서 더 많은 메모리와 계산 시간이 필요할 수 있습니다. BigDecimal은 금융 애플리케이션과 같이 돈과 소수점을 다루는 정확한 계산이 필요한 경우에 주로 사용됩니다.

 

 

✔  double 개념

 

double은 부동 소수점 숫자를 표현하기 위한 Java의 기본 데이터 타입입니다. double은 64비트의 이진 부동 소수점 숫자로 저장됩니다. double은 일반적으로 정밀도가 높은 숫자를 나타낼 때 사용되며, 대부분의 일반적인 연산에서 충분한 정확도를 제공합니다. 그러나 정밀한 십진수 연산이 필요한 경우에는 정확성 문제가 발생할 수 있습니다.

 

 

✔  float 개념

 

float은 double과 비슷하지만 32비트의 이진 부동 소수점 숫자로 저장됩니다. double보다 메모리 사용량과 계산 시간 면에서 덜 요구됩니다. 그러나 float은 더 작은 범위와 정밀도를 가지므로 더 작은 숫자 범위와 정밀도를 제한합니다.

 

 

 

요약하자면, BigDecimal은 정확한 십진수 연산에 사용되며, 정밀도와 정확성이 필요한 경우에 적합합니다. double은 대부분의 기본적인 숫자 연산에 사용되며, 적절한 정확도를 제공합니다. float은 메모리와 계산 시간을 절약하기 위해 사용되며, 상대적으로 더 낮은 정밀도를 가지고 있습니다. 

 

✔사용방법

 

1. BigDecimal 객체 생성

BigDecimal은 생성자를 사용하여 객체를 생성합니다. 일반적으로 문자열 또는 정수형 값으로 초기화합니다.

double 타입을 BigDecimal 로 초기화 하려면 문자열로 변환 후 초기화 하는 것이 안전합니다.

BigDecimal number1 = new BigDecimal("10.5"); // 문자열로 초기화
BigDecimal number2 = new BigDecimal(20);     // 정수로 초기화

 

2. 산술 연산

BigDecimal 객체는 정확한 산술 연산을 지원합니다. 덧셈, 뺄셈, 곱셈, 나눗셈 등의 연산을 수행할 수 있습니다.

BigDecimal result = number1.add(number2);      // 덧셈
BigDecimal result = number1.subtract(number2); // 뺄셈
BigDecimal result = number1.multiply(number2); // 곱셈
BigDecimal result = number1.divide(number2);   // 나눗셈

 

3. 반올림

BigDecimal은 정확한 연산을 위해 반올림 모드를 제공합니다. 반올림 모드에는 다양한 옵션이 있으며, 필요에 따라 선택할 수 있습니다.

BigDecimal rounded = result.setScale(2, RoundingMode.HALF_UP); // 소수점 2자리로 반올림

 

4. 비교

BigDecimal 객체를 비교할 때는 compareTo() 메서드를 사용합니다. 이 메서드는 두 객체를 비교하여 동등한지, 큰지, 작은지를 판단할 수 있습니다. compateTo() 메서드의 반환 값은 Int 형 입니다.

  1. 반환 값이 0인 경우: 비교 대상 BigDecimal 객체가 같다
  2. 반환 값이 양수인 경우: 비교 대상 BigDecimal 객체가 더 작다
  3. 반환 값이 음수인 경우: 비교 대상 BigDecimal 객체가 더 크다
BigDecimal number1 = new BigDecimal("10.5");
BigDecimal number2 = new BigDecimal("20");

int comparison = number1.compareTo(number2);

if (comparison == 0) {
    System.out.println("number1과 number2는 같음");
} else if (comparison < 0) {
    System.out.println("number1은 number2보다 작음"); // 출력
} else {
    System.out.println("number1은 number2보다 큼");
}

 

 

✔ 주요 용어

 

precision, scale

BigDecimal 은 상수로 0, 1, 10 자주 쓰이는 숫자는 선언되어있다.

ex) BigDecimal.ZERO 

 

 

✔참고

https://jsonobject.tistory.com/466

https://velog.io/@new_wisdom/Java-BigDecimal%EA%B3%BC-%ED%95%A8%EA%BB%98%ED%95%98%EB%8A%94-%EC%95%84%EB%A7%88%EC%B0%8C%EC%9D%98-%EB%84%88%EB%93%9C%EC%A7%93

'개발 > Java' 카테고리의 다른 글

[Java] 예외처리 try - catch - finally  (0) 2023.07.01