본문으로 바로가기

[JAVA] 무제한 큰 숫자(정수) 다루기 BigInter

category JAVA/기본 문법 2021. 3. 14. 23:46

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 의 경우 연산속도는 느릴 수 있기 때문에 속도보다는 정확해야 하는 경우에 써야 합니다.