티스토리 뷰
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 |
댓글