자바에서 금액이나 소수점 같이 정밀한 수의 표현을 위해서 BigDecimal 을 사용 할 수 있습니다.
종류 | 유형 | 범위 |
정수형 | byte | -128 ~ 127 |
short | -32768 ~ 32767 | |
int | -2147483648 ~ 2147483647 | |
long | -9223372036854775808 ~ 9223372036854775807 | |
실수형 | float | 1.4E-45 ~ 3.4028235E38 |
double | 4.9E-324 ~ 1.7976931348623157E308 |
기본적인 데이터 타입
BigDecimal
기본적인 사용법은 아래와 같다.
BigDecimal a = new BigDecimal("214");
BigDecimal b = new BigDecimal("0.031");
System.out.println("BigDecimal : " + a + " int : " + b);
//BigDecimal : 214 int : 0.031
BigDecimal 의 연산
BigDecimal a = new BigDecimal("214");
BigDecimal b = new BigDecimal("2");
System.out.println("a + b : " + a.add(b));
System.out.println("a - b : " + a.subtract(b));
System.out.println("a * b : " + a.multiply(b));
System.out.println("a / b : " + a.divide(b));
// a + b : 216
// a - b : 212
// a * b : 428
// a / b : 107
BigDecimal a = new BigDecimal("214");
BigDecimal b = new BigDecimal("3");
System.out.println("a / b : " + a.divide(b));
//Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
System.out.println("a / b : " + a.divide(b,RoundingMode.HALF_EVEN));
//71
System.out.println("a / b : " + a.divide(b,6,RoundingMode.HALF_EVEN));
//71.333333
BigDecimal 은 오브젝트 이기때문에 일반적인 변수처럼 +-*/ 를 이용하여 연산하지 못한다.
그리고 나머지가 무한대로 떨어지는 수의 나눗샘 같은 경우는 오류를 내는데,
divede 함수의 두번쨰, 세번쨰 인자로 반올림을 어떻게 할것인지, 몇번쨰 자리수에서 할것인지 정할 수 있다.
BigDecimal 의 비교
BigDecimal a = new BigDecimal("214");
BigDecimal b = new BigDecimal("2");
System.out.println("a == b : " + a.equals(b));
System.out.println("a > b = 1, a < b = 2, a == b = 0 : " + a.compareTo(b));
// a == b : false
// a > b = 1, a < b = 2, a == b = 0 : 1
BigDecimal 의 비교는 equals와 compareTo 를 이용해 할 수 있다.
그 외로 절대값, 최소값, 최대값 등을 구할수 있는 함수가 있다.
BigDecimal a = new BigDecimal("214");
BigDecimal b = new BigDecimal("-2");
System.out.println("max : " + a.max(b));
System.out.println("min : " + a.min(b));
System.out.println("abs : " + b.abs());
// max : 214
// min : -2
// abs : 2
System.out.println("0 : " + BigDecimal.ZERO);
System.out.println("1 : " + BigDecimal.ONE);
System.out.println("10 : " + BigDecimal.TEN);
// 0
// 1
// 10
int형을 BigDecimal 로 변환하는방법과 BigDecimal 을 int 타입으로 변환하는 방법.
BigDecimal a = new BigDecimal("214");
int b = 123;
BigDecimal c = new BigDecimal("214.123");
System.out.println(a.intValue());
System.out.println(new BigDecimal(b));
System.out.println(c.intValue());
//214
//123
//214
변환시 소수점은 버려진다.
'Java' 카테고리의 다른 글
[Java] 해당 월의 말일 구하기(Calendar) (0) | 2019.10.21 |
---|---|
[Java]배열과 리스트 초기화하는 방법 (0) | 2019.10.20 |
[Java]자바 반복문제어(break,continue) (2) | 2019.03.08 |
[Java]자바 진수변환(10진수->2진수,8진수,16진수) (0) | 2019.03.05 |
[Java]자바 현재 날자,시간 출력(SimpleDateFormat) (0) | 2019.02.21 |