java.math 패키지
정수형을 확장시켜주는 BigInteger 클래스
=> 자릿수 부족으로 인한 문제 해결
실수형을 확장시켜주는 BigDecimal 클래스
=> 자릿수 부족 또는 연산에서의 부정확성 문제를 해결
내부적으로 배열을 사용하여 수치데이터를 분리해서 저장하므로
수치데이터 자릿수에 제한이 없다(정수 = int[], 실수 = char[])
생성자에 문자열 형태의 수치데이터를 전달하여 데이터 생성
사칙연산 등의 모든 연산은 메서드를 호출하여 수행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
// BigInteger 객체를 생성하면 long 타입 범위를 초과하는 아주 큰 정수 처리도 가능
BigInteger bi = new BigInteger("123142334123123123");
System.out.println("BigInteger 정수 : " + bi); // toString() 메서드 오버라이딩 되어 있음
BigInteger bi2 = new BigInteger("-99999999999999999999999999999999");
// 기본 사칙연산 : 각 메서드를 호출하여 BigInteger 타입 파라미터를 피연산자로 사용
bi.add(bi2); // 더하기
bi.subtract(bi2); // 빼기
bi.multiply(bi2); // 곱
bi.divide(bi2); // 나누기 몫
// 나머지 연산의 경우 2가지 메서드로 나누어지며
// 둘 다 나눗셈 결과의 나머지를 리턴하지만
// mod() 메서드의 경우 결과값이 음수일 때 ArithmeticException 예외를 발생시킴
try {
System.out.println("remainder : " + bi.remainder(bi2));
System.out.println(bi.mod(bi2));
} catch (Exception e) {
System.out.println("나눗셈 결과의 나머지가 음수");
}
remainder : 12345678901234567890123144552
나눗셈 결과의 나머지가 음수
// 실수 연산 과정에서 유효자릿수에 대한 표현 문제로
// 연산 결과가 올바른 값이 아닐 수 있다. (특히 .1 에 대한 문제가 주로 발생)
double d1 = 2.0;
double d2 = 1.1;
=> 0.8999999999999999
// 따라서, 실수끼리의 연산은 BigDecimal 클래스를 이용하는 것이 안전하다.
// 기본데이터타입 중 정수형으로 변환 후 처리도 가능하지만, 자릿수 문제 발생
// 주의! 반드시 생성자에 문자열! 타입으로 실수데이터를 전달해야 문제가 없다!
BigDecimal bd1 = new BiDecimal("2.0");
BigDecimal bd2 = new BiDecimal("1.1");
System.out.println(bd1.subtract(bd2)); => 0.9
|
cs |
'Language > Java' 카테고리의 다른 글
Map 인터페이스 - Collection 프레임워크 (0) | 2020.06.25 |
---|---|
enum 타입(열거형 데이터 타입) (0) | 2020.06.24 |
Random 클래스 (0) | 2020.06.24 |
Math 클래스 (0) | 2020.06.23 |
StringBuffer & StringBuffer 클래스 (0) | 2020.06.23 |