BigDecimal은 Java에서 고정 소수점이나 임의 정밀도의 숫자 계산을 처리하기 위해 사용되는 클래스이다. 주로 금액 계산처럼 정확한 소수점 연산이 필요한 경우 사용한다.
문자열 사용
BigDecimal은 String으로 초기화하는 것이 가장 안전하다.
BigDecimal bd = new BigDecimal("123.45");
숫자 타입 사용
실수 타입(double, float)을 사용하면 부동소수점 오류가 발생할 수 있다.
BigDecimal bd = BigDecimal.valueOf(123.45); // 권장
덧셈 (add)
BigDecimal result = bd1.add(bd2);
뺄셈 (subtract)
BigDecimal result = bd1.subtract(bd2);
곱셈 (multiply)
BigDecimal result = bd1.multiply(bd2);
나눗셈 (divide)
나눗셈 시 RoundingMode를 반드시 설정해야 한다.
BigDecimal result = bd1.divide(bd2, RoundingMode.HALF_EVEN);
스케일 설정 (setScale)
소수점 자릿수를 조정한다.
BigDecimal result = bd.setScale(2, RoundingMode.HALF_UP);
비교 (compareTo)
int comparison = bd1.compareTo(bd2); // -1, 0, 1 반환
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalExample {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("100.25");
BigDecimal bd2 = new BigDecimal("50.15");
// 덧셈
BigDecimal sum = bd1.add(bd2);
// 나눗셈
BigDecimal division = bd1.divide(bd2, 2, RoundingMode.HALF_UP);
// 스케일 조정
BigDecimal scaled = bd1.setScale(1, RoundingMode.DOWN);
// 결과 출력
System.out.println("덧셈 결과: " + sum);
System.out.println("나눗셈 결과: " + division);
System.out.println("스케일 조정 결과: " + scaled);
}
}
BigDecimal은 불변 객체이므로, 연산 결과는 항상 새로운 객체로 반환된다.