티스토리 뷰

BigInteger 클래스 

정수 기본형 데이터타입을 확장한 클래스 (금융권에서 주로사용)

Integer i = 10;	- Wrapper 클래스 타입은 오토박싱/오토언박싱에 의해 자동 변환

BigInteger bi = 10; - BigInteger 클래스 타입은 자동변환 지원되지 않아,
			생성자를 통해 문자열 형태로 정수를 전달해야한다!

- long 타입보다 크거나 작은 정수는 취급이 불가능한 문제를 해결한다.

- 객체 생성 시 파라미터로 전달할 정수는 "문자열" 형태로 전달한다.

- 정수 데이터를 내부적으로 int[ ]타입으로 관리하고 toString()메서드가 오버라이딩 되어있다.

 

일반 산술연산자를 사용한 연산은 불가능하며 반드시 메서드 통해 연산 수행
=> add(), substract(), multiply(), divide() 등 산술 연산 메서드 제공

기본데이터타입으로 변환을 위해 기본데이터타입Value() 메서드를 사용하고

각 기본 데이터타입 크기에 따라 오버플로우가 발생하여 올바르지 못한 데이터가 저장될 수 있다.

 

BigInteger bi = new BigInteger("9999999999999999999999999999");
// long 타입보다 큰 정수도 문자열 형태로 전달이 가능하며 접미사 불필요
		
// 분명히 객체인데 주소가 나오지 않는 이유 = toString() 메서드 오버라이딩(출력 간편!)
System.out.println(bi);

 

데이터타입Value( ) 메서드

BigInteger -> 기본 데이터타입으로 변환

// BigInteger -> int로 변환(오버플로우 발생 가능성 있음)
int num = bi.intValue();
System.out.println(num);
	
BigInteger bi2 = new BigInteger("55555555555555555555");
// System.out.println(b1+b2); // 일반 산술연산자 사용 불가능 -> 객체니깐

 

메서드를 통한 연산 수행

// 덧셈 - add() 메서드
System.out.println(bi.add(bi2));
		
// 뺄셈 - subtract() 메서드
System.out.println(bi.subtract(bi2));
		
// 곱셈 - multiply() 메서드
System.out.println(bi.multiply(bi2));
		
// 나눗셈(몫) - divide() 메서드
System.out.println(bi.divide(bi2));
		
// 나눗셈(나머지) - remainder() 메서드
System.out.println(bi.remainder(bi2));
	
// 나눗셈(나머지 - mod() 메서드
// => 나머지 연산에서 두번째 피연산자가 음수일경우 ArithmeticException 발생
System.out.println(bi.mod(bi2));

 

BigDecimal 클래스

실수 기본형 데이터타입을 확장한 클래스 (공장 생산 계열에서 주로 사용)

- 실수 표현 방식으로 인한 정확도의 문제를 해결한다.

- 실수 데이터를 내부적으로 char[] 타입으로 관리한다.

- 객체 생성 시 기본 데이터타입(float/double)을 사용하면 값의 정확도가 떨어질 수 있어 문자열 형태로 생성!

BigDecimal bc = new BigDecimal(1.1); // 부정확한 실수 저장
BigDecimal bc = new BigDecimal("1.1"); // 부정확한 실수 저장

double d1 = 2.0;
double d2 = 1.1;
System.out.println(d1);
System.out.println(d2);
System.out.println(d1-d2);	// 정확하지 않음
		
// 기본 데이터타입으로 객체 생성하면 값이 부정확 할 수 있다.
//	BigDecimal bc1 = new BigDecimal(2.0);
//	BigDecimal bc2 = new BigDecimal(1.1);

BigDecimal bc1 = new BigDecimal("2.0");
BigDecimal bc2 = new BigDecimal("1.1");
		
System.out.println(bc1);
System.out.println(bc2);
		
System.out.println(bc1.subtract(bc2));


double d3 = 1.1;
// BigDecimal bc3 = new BigDecimal(d3);	// 기본데이터타입 그대로 전달하면 문제 발생할 수 있음
// System.out.println(bc3);

기본적인 사용법(메서드)은 BigInteger 클래스와 거의 동일하다!

 

double -> 문자열로 변환해 BigDecimal 객체 생성하는 방법

1.
// BigDecimal bc3 = new BigDecimal(d3 + ""); // 문자열로 바꾸기 위해 널스트링과 결합

2.
BigDecimal bc3 = new BigDecimal(Double.toString(d3)); // Double.toString()
BigDecimal bc4 = new BigDecimal(String.valueOf(d3));  // String.valueOf() 
		
System.out.println(bc3);

'배운 것 기록 > java' 카테고리의 다른 글

DecimalFormat, MessageFormat 클래스  (0) 2022.07.16
자바 I/O - Input / Output  (0) 2022.07.13
Formatting - SimpleDataFormat, DateTimeFormatter  (0) 2022.07.11
람다식 표현과 this  (0) 2022.07.02
Thread  (0) 2022.06.28
댓글
최근에 올라온 글
«   2024/12   »
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
글 보관함