BigDecimal

enxnong·2023년 1월 11일
0

BigDecimal이란?

  • BigDecimal은 Java 언어에서 숫자를 정밀하게 저장하고 표현할 수 있는 유일한 방법이다.
  • 소수점을 저장할 수 있는 가장 크기가 큰 타입인 double은 소수점의 정밀도에 있어 한계가 있어 값이 유실될 수 있다.
  • Java 언어에서 돈과 소수점을 다룬다면 BigDecimal은 선택이 아니라 필수이다.
  • BigDecimal의 유일한 단점은 느린 속도와 기본 타입보다 조금 불편한 사용법 뿐이다.

BigDecimal 기본상수

float, double 타입과 다르게 BigDecimal 타입은 초기화가 기본 타입보다는 긴 편이다. 그래서, 자주 쓰는 0, 1, 100은 쓰기 편하게 미리 상수로 정의되어 있다.

// 0
BigDecimal.ZERO

// 1
BigDecimal.ONE

// 10
BigDecimal.TEN

BigDecimal 초기화

double 타입으로 부터 BigDecimal 타입을 초기화하는 방법으로 가장 안전한 것은 문자열의 형태로 BigDecimal 생성자에 전달하는 것이다. double 타입 그대로 전달하는 경우 예상과 다른 결과를 얻을 수 있다.

// double 타입을 그대로 초기화하면 기대값과 다른 값을 가진다.
// 0.01000000000000000020816681711721685132943093776702880859375 
// => 에러!!!
new BigDecimal(0.01);

// ==================== 문자열 전달 방법 =====================
// 문자열로 초기화하면 정상 인식
// 0.01
new BigDecimal("0.01");

// 0.01
new BigDecimal(String.valueOf(0.01));

// 0.01
BigDecimal.valueOf(0.01);

BigDecimal 비교 연산

BigDecimal은 객체이기 때문에 동등 비교 연산을 할 때 주의해야 된다. 특히, double타입을 사용할 때와 마찬가지로 == 기호를 사용할 때 주의해야 된다.

BigDecimal a = new BigDecimal("13.08");
BigDecimal b = new BigDecimal("13.080");

// 객체를 비교할 때 사용, 두 객체가 동일한 객체가 아니므로 false 반환
// 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");

// 더하기
// 13
a.add(b);

// 빼기
// 7
a.subtract(b);

// 곱하기
// 30
a.multiply(b);

// 나누기
// 3.333333...
a.divide(b);

// 나누기 (소수점 3자리까지 반환)
// 3.333
a.divide(b, 3, RoundingMode.HALF_EVEN);

// 절대값
// 3
new BigDecimal("-3").abs();

// 두 수 중 최소값
// 3
a.min(b);

// 두 수 중 최대값
// 10
a.max(b);
profile
높은 곳을 향해서

0개의 댓글