Develop/JAVA

[Java] BigDecimal 나누기 소수점 올림, 버림, 반올림 사용방법

issuemaker99 2024. 10. 21. 17:39
728x90

BigDecimal의 필요성

float 또는 double 타입은 부동소수점 방식을 사용하기 때문에, 소수점 연산 시 오차가 발생할 수 있습니다. 이를 해결하기 위해 BigDecimal은 고정 소수점 연산을 제공하며, 소수점 이하 자릿수의 처리를 정확하게 제어할 수 있는 기능을 제공합니다.

특히 BigDecimal로 나눗셈을 할 때, 소수점 처리를 어떻게 할 것인지에 대한 설정을 해야 합니다. 이때 사용할 수 있는 방식은 올림, 버림, 반올림입니다.


1. 기본적인 BigDecimal 나눗셈

BigDecimal의 divide() 메소드는 두 숫자를 나눌 때 소수점 처리 방식을 선택할 수 있습니다. RoundingMode를 이용하여 나눗셈 결과의 소수점 처리를 정의할 수 있습니다.

import java.math.BigDecimal;
import java.math.RoundingMode;

public class BigDecimalExample {
    public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("10");
        BigDecimal num2 = new BigDecimal("3");

        // 나눗셈 결과를 소수점 이하 2자리까지 반올림
        BigDecimal result = num1.divide(num2, 2, RoundingMode.HALF_UP);
        System.out.println("나눗셈 결과 (반올림): " + result);
    }
}

 

결과:

나눗셈 결과 (반올림): 3.33

 

위 예제에서는 divide() 메소드에서 두 번째 인자로 소수점 자릿수(여기서는 2자리), 세 번째 인자로 반올림 방식을 지정했습니다. 이제 각각의 소수점 처리 방법을 자세히 살펴보겠습니다.


2. 소수점 올림 (RoundingMode.CEILING)

올림은 소수점 이하 값이 있으면 무조건 더 큰 값으로 올려주는 방식입니다. 양수에서는 값을 올리고, 음수에서는 절대값이 작은 쪽으로 올립니다.

예제

import java.math.BigDecimal;
import java.math.RoundingMode;

public class BigDecimalCeilingExample {
    public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("10");
        BigDecimal num2 = new BigDecimal("3");

        // 소수점 이하 2자리까지 올림
        BigDecimal result = num1.divide(num2, 2, RoundingMode.CEILING);
        System.out.println("나눗셈 결과 (올림): " + result);
    }
}

 

결과:

나눗셈 결과 (올림): 3.34

 

설명

  • RoundingMode.CEILING은 나눗셈 결과에서 소수점 이하 값을 무조건 올림 처리하여 결과를 반환합니다.
  • 예를 들어, 3.333...을 소수점 둘째 자리에서 올림하면 3.34가 됩니다.

3. 소수점 버림 (RoundingMode.FLOOR)

버림은 소수점 이하의 값을 무조건 버리는 방식입니다. 양수는 값을 내리고, 음수는 절대값이 큰 쪽으로 내립니다.

예제

import java.math.BigDecimal;
import java.math.RoundingMode;

public class BigDecimalFloorExample {
    public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("10");
        BigDecimal num2 = new BigDecimal("3");

        // 소수점 이하 2자리까지 버림
        BigDecimal result = num1.divide(num2, 2, RoundingMode.FLOOR);
        System.out.println("나눗셈 결과 (버림): " + result);
    }
}

 

결과:

나눗셈 결과 (버림): 3.33

 

설명

  • RoundingMode.FLOOR는 소수점 이하를 버려서 결과를 반환합니다.
  • 예를 들어, 3.333...에서 소수점 둘째 자리까지 버리면 3.33이 됩니다.

4. 소수점 반올림 (RoundingMode.HALF_UP)

반올림은 소수점 첫째 자리가 0.5 이상일 때 올리고, 그보다 작으면 버리는 방식입니다. 우리가 일상생활에서 사용하는 일반적인 반올림 방식입니다.

예제

import java.math.BigDecimal;
import java.math.RoundingMode;

public class BigDecimalHalfUpExample {
    public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("10");
        BigDecimal num2 = new BigDecimal("3");

        // 소수점 이하 2자리까지 반올림
        BigDecimal result = num1.divide(num2, 2, RoundingMode.HALF_UP);
        System.out.println("나눗셈 결과 (반올림): " + result);
    }
}

 

결과:

나눗셈 결과 (반올림): 3.33

 

설명

  • RoundingMode.HALF_UP은 소수점 이하 첫째 자리가 0.5 이상이면 올리고, 그렇지 않으면 버립니다.
  • 3.333...에서 반올림하면 3.33이 됩니다.

5. 소수점 자릿수에 맞춰 정밀하게 나누기

BigDecimal은 소수점 자릿수를 정확하게 관리할 수 있기 때문에, 나눗셈에서 원하는 소수점 자릿수만큼 반올림, 올림, 버림 처리가 가능합니다. 나눗셈 연산 시 divide() 메소드를 사용할 때, 소수점 자릿수와 함께 적절한 RoundingMode를 설정하는 것이 중요합니다.


 

LIST