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를 설정하는 것이 중요합니다.
'Develop > JAVA' 카테고리의 다른 글
[Spring Framework] application.yml 파일에서 값 암호화 (7) | 2024.10.28 |
---|---|
[Java] Spring Security 에서 SameSite 설정방법 (PG사 결제 시 리턴 후 세션 끊김현상 해결) (6) | 2024.10.24 |
[Spring Boot] application.yml 변수 Java Static 변수에서 사용하는 방법 (12) | 2024.10.15 |
[Java] 현재 서버 도메인 정보 갖고오기 (13) | 2024.09.26 |
[Java] spring security 설정 csrf 특정 url 예외 처리 (6) | 2024.09.26 |