BigInteger를 사용해야 하는 이유
Type | 범위 |
int | -2,147,483,648 ~ 2,147,483,647 |
long | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
Int또는 Long그리고 long타입에 L을 붙여가면서 풀어야되는 일이 있었습니다.
하지만 이것들은 어디까지 범위기 제한적이고, Stirng으로 풀어가면서 아래와 같은 에러가 발생하였습니다.
해당 범위를 넘어서게 되면 모두 0으로 출력이 됩니다. 숫자의 범위가 저 범위를 넘을 경우는 잘 없겠지만 프로그램 개발 특히 돈과 관련된 개발(BigDecimal)이나 알고리즘 문제를 풀 때 항상 최악의 상황을 고려해야 하므로 무한의 정수가 들어갈 수 있는 가능성이 있다면 BigInteger이라는 클래스를 활용하는 것이 좋습니다.
BigInteger은 내부적으로 문자열(String) 형태로 이루어져 있어 숫자의 범위가 무한하기에 어떠한 숫자이든지
담을 수 있습니다.
BigInteger: Immutable arbitrary-precision integers. (불변한 임의의 정말한 정수)
예시코드
// Big Integer 형 변환
BigInteger bigNumber = BigInteger.valueOf(1234567); //int -> BigIntger
int int_bigNum = bigNumber.intValue(); //BigIntger -> int
long long_bigNum = bigNumber.longValue(); //BigIntger -> long
float float_bigNum = bigNumber.floatValue(); //BigIntger -> float
double double_bigNum = bigNumber.doubleValue(); //BigIntger -> double
String String_bigNum = bigNumber.toString(); //BigIntger -> String
// Big Integer 두수 비교
BigInteger bigNumber1 = new BigInteger("200000");
BigInteger bigNumber2 = new BigInteger("2000000");
//두 수 비교 compareTo 맞으면 0 틀리면 -1
int compare = bigNumber1.compareTo(bigNumber2);
System.out.println(compare)
다만 BigDecimal 의 경우 연산속도는 느릴 수 있기 때문에 속도보다는 정확해야 하는 경우에 써야 합니다.
'JAVA > 기본 문법' 카테고리의 다른 글
[JAVA] StringTokenizer VS String split() (0) | 2021.04.13 |
---|---|
[JAVA] static과 싱글톤 패턴 예제 (0) | 2021.03.01 |
[JAVA] static메서드의 구현과 활용, 변수의 유효 범위 (0) | 2021.03.01 |