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
은 불변 객체이므로, 연산 결과는 항상 새로운 객체로 반환된다.