728x90
https://www.acmicpc.net/problem/2720
위의 문제를 풀다가 BigDecimal을 처음 사용해봤는데 잘 정리해두면 유용하게 쓰일 것 같아서 포스팅합니다!
BigDecimal?
- 자바에서 숫자를 정밀하게 저장하고 표현할 수 있는 객체입니다.
- 자바에서 소수는 정밀도의 한계로 인해 값이 유실되는 경우가 있는데, 그것을 방지할 수 있습니다.
- 단점은 느린 속도 & 복잡한 사용 방법을 제외하면 없습니다. (그만큼 좋음!)
BigDecimal 기본 상수
BigDecimal은 객체이기 때문에 초기화가 기본 타입보다는 긴 편입니다. 그래서 자주 사용하는 0, 1, 100은 쓰기 편하도록 상수로 정의되어 있습니다.
// 0
BigDecimal.ZERO
// 1
BigDecimal.ONE
// 10
BigDecimal.TEN
BigDecimal 초기화
double 타입을 가장 안전하게 BigDecimal을 이용해서 초기화하는 방법은 문자열 형태로 BigDecimal 생성자에게 전달하는 것입니다. double 타입 그대로 전달할 경우 예상과 다른 값을 얻을 수 있습니다.
// double 타입 전달 -> 0.01000000000000000020816681711721685132943093776702880859375 에러!!
BigDecimal bc1 = new BigDecimal(0.01);
// 문자열 전달 방법
BigDecimal bc2 = new BigDecimal("0.01");
BigDecimal bc3 = new BigDecimal(String.valueOf(0.01));
BigDecimal bc4 = BigDecimal.valueOf(0.01);
BigDecimal 비교 연산
BigDecimal은 객체이기 때문에 비교 연산을 사용할 때 조심해야 합니다. 특히 동등 비교 연산자(==)를 사용할 때 조심해야 합니다.
BigDecimal a = new BigDecimal("15.57");
BigDecimal b = new BigDecimal("15.570");
// false
a == b;
// 값 비교에 사용, 소수점 끝 0 까지 같아야 true를 리턴
// false
a.equals(b);
// 값 비교에 사용, 소수점 끝 0을 무시하고 값이 동일하면 0, 크면 1, 작으면 -1
// 0
a.compareTo(b);
BigDecimal 사칙 연산
BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("3");
// 1. 더하기
a.add(b);
// 2. 빼기
a.substract(b);
// 3. 곱하기
a.multiply(b);
// 4. 나누기
a.divide(b);
// 5. 나머지
a.remainder(b);
// 절대값
new BigDecimal("-3").abs();
// 두 수 중 최소값
// 3
a.min(b);
// 두 수 중 최대값
// 10
a.max(b);
더 자세한 내용들이 많은데 아직 다 이해가 되지 않아서 이해한 부분만 간단하게 정리해 봤습니다!
내용은 계속해서 추가해 가려고 합니다.
728x90
'Back-End > Java' 카테고리의 다른 글
[자바/JAVA] 래퍼 클래스(Wrapper Class) (0) | 2021.02.02 |
---|---|
[자바/JAVA] StringBuffer / StringBuilder (0) | 2021.02.02 |
[자바/JAVA] String 클래스 (0) | 2021.02.01 |
[자바/JAVA] 문자열 분리 (StringTokenizer) 🔥 (0) | 2021.02.01 |