BigDecimal 클래스
: 정수를 이용해서 실수를 표현
: 불변하며 정수를 저장하는데 BigInteger를 사용
BigDecimal val = new BigDecimal("123.45");
System.out.println(val.unscaledValue()); // 12345
System.out.println(val.scale()); // 2
System.out.println(val.precision()); // 5
BigDecimal의 생성
: 문자열로 표현하는 것이 일반적
BigDecimal val;
val = new BigDecimal("123.4567890"); // 문자열로 생성
val = new BigDecimal(123.456); // double타입의 리터럴 생성
val = new BigDecimal(123456); // int, long타입의 리터럴로 생성 가능
val = BigDecimal.valueOf(123.456); // 생성자 대신 valueOf 사용(double)
val = BigDecimal.valueOf(123456); // 생성자 대신 valueOf 사용(int)
★ double 타입의 값을 매개변수로 갖는 생성자를 사용하면 오차가 발생할 수 있음
다른 타입으로의 변환
Stirng toPlainString() // 다른 기호없이 숫자로만 표현
String toString() // 필요하면 지수형태로 표현 가능
- Number로 부터 상속받은 기본형으로 변환하는 메서드 가지고 있음
int intValue()
long ...
float ...
double ...
- 정수형으로 변환하는 메서드 중에서 이름 끝에 'Exact'가 붙은 것들은 변환한 결과 변환한 타입의 범위에 속하지 않으면 ArithmeticException 발생
byte byteValueExact()
short ...
int ...
long ...
BigInteger ...
BigDecimal의 연산
BigDecimal add(BigInteger val)
BigDecimal subtract(BigInteger val)
BigDecimal multiply(BigInteger val). // 곱셈
BigDecimal divide(BigInteger val)
BigDecimal remainder(BigInteger val). // 나머지
★ 반환타입이 Decimal인 경우 새로운 인스턴스가 반환
★ 연산결과에 따라 정수, 지수, 정밀도가 달라진다.
반올림모드 - divide()와 setScale()
: 나눗셈을 처리하기 위한 메서드는 다양한 버전이 존재
BigDecimal divid(BigDecimal divisor)
BigDecimal divid(BigDecimal divisor, int roundingMode)
BigDecimal divid(BigDecimal divisor, RoundingMode roundingMode)
BigDecimal divid(BigDecimal divisor, int scale, int roundingMode)
BigDecimal divid(BigDecimal divisor, int scale, RoundingMode roundingMode)
BigDecimal divid(BigDecimal divisor, MathContext mc)
★ 1.0/3.0 처럼 divide()로 나눗셈한 결과가 무한소수인 경우, 반올림 모드 지정해주지 않으면 ArithmeticException 발생
java.math.MathContext
: 반올림 모드와 정밀도을 하나로 묶어 놓은 것
BigDecimal bd1 = new BigDecimal("123.456");
BigDecimal bd2 = new BigDecimal("1.0");
System.out.println(bd1.divide(bd2, 2, HALF_UP)); // 123.46
System.out.println(bd1.divide(bd2, new MathContext(2, HALF_UP))); // 1.2E+2
scale의 변경
: setScale()을 이용
BigDecimal setScale(int newScale)
BigDecimal setScale(int newScale, int roundingMode)
BigDecimal setScale(int newScale, RoundingMode mode)
'Language > java' 카테고리의 다른 글
[Java] 컬렉션 프레임윅 (컬렉션 프레임웍의 핵심 인터페이스) (0) | 2022.07.20 |
---|---|
[Java] 날짜와 시간 (Calendar와 Date) (0) | 2022.07.20 |
[Java] 유용한 클래스 (java.math.BigInteger 클래스) (0) | 2022.07.15 |
[Java] 유용한 클래스 (java.util.StringTokenizer 클래스) (0) | 2022.07.15 |
[Java] 유용한 클래스 (java.util.Scanner 클래스) (0) | 2022.07.15 |
댓글