MathContext는 자바의 java.math 패키지에 포함된 클래스로, BigDecimal 연산의 수학적 설정(정밀도와 반올림 모드)을 지정하는 데 사용된다.
정밀도(Precision)는 결과가 표현할 수 있는 최대 자릿수를 의미한다. 예를 들어, 정밀도가 5인 경우, 결과는 최대 5자리 숫자를 가질 수 있다.
반올림 모드(Rounding Mode)는 정밀도를 초과하는 숫자를 어떻게 처리할지 결정하는 규칙이다. 예를 들어, 반올림 모드가 HALF_UP인 경우, 소수점 이하의 숫자가 5 이상이면 올림하고, 그렇지 않으면 버림한다.
MathContext는 이런 설정들을 모아둔 것으로, BigDecimal 연산 시에 이를 인자로 전달하여 연산 방식을 제어할 수 있다.
정밀도 사용
import java.math.MathContext;
import java.math.BigDecimal;
public class MathContextExample1 {
public static void main(String[] args) {
// MathContext 객체 생성 (정밀도: 7)
MathContext mc = new MathContext(7);
// BigDecimal 객체 생성 (값: 111.1111111)
BigDecimal number1 = new BigDecimal("111.1111111", mc);
System.out.println("number1: " + number1);
// BigDecimal 객체 생성 (값: 11111.11111)
BigDecimal number2 = new BigDecimal("11111.11111", mc);
System.out.println("number2: " + number2);
// 덧셈 연산 수행
BigDecimal result = number1.add(number2, mc);
System.out.println("덧셈 결과: " + result);
}
}
/*
number1: 111.1111
number2: 11111.11
덧셈 결과: 11222.22
*/
MathContext( {정밀도} )
위의 예제1 코드는 정밀도를 7로 제한하여 계산을 위해 설정된 값과 결과 값이 7자리만 지정되었다.
정밀도, 반올림 모드 사용
import java.math.MathContext;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class MathContextExample2 {
public static void main(String[] args) {
// MathContext 객체 생성 (정밀도: 7, 반올림 모드: HALF_UP)
MathContext mc = new MathContext(4, RoundingMode.HALF_UP);
// BigDecimal 객체 생성 (값: 2.34567)
BigDecimal number1 = new BigDecimal("2.34567");
System.out.println("number1: " + number1);
// BigDecimal 객체 생성 (값: 1.23456)
BigDecimal number2 = new BigDecimal("1.23456");
System.out.println("number2: " + number2);
// 곱셈 연산 수행
BigDecimal resultA = number1.multiply(number2);
System.out.println("곱셈A 결과: " + resultA);
BigDecimal resultB = number1.multiply(number2, mc);
System.out.println("곱셈B 결과: " + resultB);
}
}
/*
number1: 2.34567
number2: 1.23456
곱셈A 결과: 2.8958703552
곱셈B 결과: 2.896
*/
MathContext( {정밀도}. {반올림 모드} )
위의 예제2 코드는 정밀도를 4로 제한하고 반올림 모드 HALF_UP을 사용하여 5번째 수에서 반올림 된 4자리의 수만 출력되었다.
이처럼 MathContext는 BigDecimal 연산의 정밀도와 반올림 방식을 손쉽게 제어할 수 있는 방법을 제공한다. 이를 통해 복잡한 수치 연산을 보다 편리하게 수행할 수 있다.
'알아가기 > Java' 카테고리의 다른 글
Java의 BigInteger 클래스 (0) | 2024.11.25 |
---|---|
[Java] ListIterator: 리스트 순회를 위한 양방향 인터페이스 (0) | 2024.04.01 |
[Java] Arrays.stream() 및 sum() 메서드 (0) | 2024.01.25 |
[Java] Arrays.stream() 및 Arrays.copyOfRange() 함수 (0) | 2023.08.29 |
[Java] 토큰으로 분리하는 StringTokenizer (0) | 2023.08.27 |