Java
Java - BigInteger,BigDecimal
프리덕
2020. 6. 30. 23:05
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
import java.math.BigDecimal;
import java.math.BigInteger;
public class Ex2 {
public static void main(String[] args) {
/*
* BigInteger & BigDecimal 클래스
* java.math 패키지
* 정수형을 확장시켜주는 BigInteger 클래스
* ->자릿수 부족으로 인한 문제 해결
* 실수형을 확장시켜주는 BigDecimal 클래스
* ->자릿수 부족 또는 연산에서의 부정확성 문제를 해결
* 내부적으로 배열을 사용하여 수치데이터를 분리해서 저장하므로
* 수치데이터 자릿수에 제한이 없다(정수=int[], 실수=char[])
* 생성자에 문자열 형태의 수치데이터를 전달하여 데이터 생성
* 사칙연산 등의 모든 연산은 메서드를 호출하여 수행
*
*
*/
//long l=112465498987216843243546541574248541213254654874545L;//Long 타입 범위 초과하는 정수 사용불가
//BigInteger 객체를 생성하면 long 타입 범위를 넘어서는 아주 큰 정수 처리도 가능
BigInteger bi= new BigInteger("112465498987216843243546541574248541213254654874545");
System.out.println("BigIngteger 정수 : "+bi);//toString() 메서드 오버라이딩 되어있음
BigInteger bi2=new BigInteger("-99999999");
//기본 사칙연산 : 각 메서드를 호출하여 BigInteger 타입 파라미터를 피연산자로 사용
System.out.println(bi.add(bi2));
System.out.println(bi.subtract(bi2));
System.out.println(bi.multiply(bi2));
System.out.println(bi.divide(bi2));
//나머지 연산의 경우 2가지 메서드로 나누어지며
//둘다 나눗셈 결과의 나머지를 리턴하지만
//mod() 메서드의 경우 결과값이 음수일때 ArithmeticException 예외를 발생시킴
System.out.println(bi.remainder(bi2));
try {
System.out.println(bi.mod(bi2));
} catch (Exception e) {
System.out.println("나눗셈 결과의 나머지 값이 음수입니다!");
}
System.out.println("------------------------------------------------");
//실수 연산 과정에서 유효자릿수에 대한 표현 문제로
//연산 결과가 올바른 값이 아닐수 있다. 특히 .1 에 대한 문제가 주로 발생
double d1=2.0;
double d2=1.1;
System.out.println(d1-d2);
//따라서 실수끼리의 연산은 BigDecimal 클래스를 사용하는 것이 안전하다.
//기본 데이터타입 중 정수형으로 변환 후 처리도 가능하지만, 자릿수 문제 발생
BigDecimal bd1=new BigDecimal("2.0");
//주의!@ 반드시 생성자에 문자열 타입으로 실수데이터를 전달해야 문제가 없다.
BigDecimal bd2=new BigDecimal("1.1");
System.out.println(bd1.subtract(bd2));
}
}
|
cs |
BigInteger와 BigDecimal 은 정수형 타입과 실수형 타입을 사용할 때 자릿수 부족을 확장시켜주는 역할을 하는 클래스 들이다. 특히 실수형 같은 경우엔 0.1 단위 차이로 문제가 자주 발생하는데 BigDecimal을 사용하면 그런 문제를 해결해준다.
다만, BigDecimal 을 사용할 때 값은 "" 문자열 타입으로 입력을 해주어야 한다.