본문 바로가기
언어 & 라이브러리/자바

[자바] BigDecimal 클래스란?

by illlilillil 2022. 10. 14.

BigDecimal

BigDecimal은 자바 언어에서 숫자를 정밀하게 다룰 수 있는 유일한 방법이다.

돈과 소수점을 다룰땐 BigDecimal을 반드시 써야한다. 불변 클래스라는 특징이 있다.

BigDecimal은 다른 타입보다 상대적으로 느리다는 단점이 있다.

 

소수점을 저장할 수 있는 float, double은 정밀도가 정확하지 않아 정확한 값을 출력하지 못한다.

double의 부정확함

자바는 IEEE 754 부동 소수점 방식을 사용해 정확한 실수를 저장하지 않고, 근사치 값을 저장하기 때문에 정확한 값이 저장이 안된다.

 

따라서 정수를 이용해 실수를 표현하는 BigDecimal을 사용해야 한다.

 

BigDecimal의 변수

  1. intValue: 정수
  2. scale: 지수, 소수점 첫째 자리부터 0이 아닌 자리까지의 개수
  3. precision: 정밀도, 오른쪽부터 0이 아닌 수가 시작하는 위치부터 0이 아닌 수로 끝나는 위치까지의 개수

 

BigDecimal 생성법

문자열로 표현하는 것이 일반적이나 double 형태로 데이터를 전달하면 오차가 날 수도 있다.

BigDecimal money;
money = new BigDecimal("1111.11");
money = new BigDecimal(1111.111);
money = new BigDecimal(111111);
money = BigDecimal.valueOf(11111.11);
money = BigDecimal.valueOf(1111111);

 

BigDecimal의 비교법

BigDecimal은 Comparable 객체를 구현했기 때문에 바로 비교가 가능하다.

 

가장 중요한 연산이다

BigDecimal의 연산

BigDecimal은 add, subtract, multiply, devide를 제공한다.

곱하기와 나눗셈은 숫자에 따라 자릿수가 변하게 된다.

BigDecimal은 안전한 타입이나 여러 국가의 통화를 표현하기에는 부족함이 있다.

자바는 국제 표준에 맞춘 JSR 354로 Moneta 라이브러리를 제공한다. 따라서 정식 구현체를 통해 구현하는 것이 안전성이 높다.

댓글