[Java] 큰 숫자(실수) 다루기 BigDecimal 사용법 & 예제 총정리
- Language/Java
- 2020. 9. 11.
BigDecimal을 사용해야 하는 이유
Type | 범위 |
float | 1.4E-45 ~ 3.4028235E38 |
double | 4.9E-324 ~ 1.7976931348623157E308 |
소수점을 저장할 수 있는 타입인 float과 double은 소수점의 정밀도가 완벽하지 않아 값의 오차가 생길 수 있습니다. 특히 소수점 이하의 수를 다룰 때 double과 float은 사칙연산 시 정확한 값을 출력하지 않을 수 있는데요. 그 이유는 내부적으로 수를 저장할 때 이진수의 근사치를 저장하기 때문입니다. 그렇기에 미세한 숫자의 변동도 허용하지 않는 특히 돈과 소수점을 다룬다면 BigDecimal을 사용하셔야 합니다. BigDecimal은 속도는 느리지만 숫자가 어긋날 가능성을 미연에 방지할 수 있습니다.
BigDecimal 사용법
BigDecimal 선언
BigDecimal bigNumber = new BigDecimal("10000.12345");
BigDecimal은 java.math안에 있으며 위와 같이 선언하시면 됩니다. 특이한 점은 BigDecimal을 초기화하기 위해서는 문자열을 인자 값으로 넘겨주어야 한다는 점입니다. BigDecimal가 문자열로 되어 있기 때문입니다. 사용법은 BigIntger와 같습니다.
BigInteger 계산
BigDecimal bigNumber1 = new BigDecimal("100000.12345");
BigDecimal bigNumber2 = new BigDecimal("10000");
System.out.println("덧셈(+) :" +bigNumber1.add(bigNumber2));
System.out.println("뺄셈(-) :" +bigNumber1.subtract(bigNumber2));
System.out.println("곱셈(*) :" +bigNumber1.multiply(bigNumber2));
System.out.println("나눗셈(/) :" +bigNumber1.divide(bigNumber2));
System.out.println("나머지(%) :" +bigNumber1.remainder(bigNumber2));
BigDecimal은 문자열이기에 사칙연산이 안됩니다. 그렇기에 BigDecimal 내부의 숫자를 계산하기 위해서는 BigDecimal클래스 내부에 있는 메서드를 사용해야 합니다.
BigDecimal 형 변환
BigDecimal bigDecimal = BigDecimal.valueOf(100000.12345); //double -> BigDecimal
int int_bigNum = bigDecimal.intValue(); //BigDecimal -> int
long long_bigNum = bigDecimal.longValue(); //BigDecimal -> long
float float_bigNum = bigDecimal.floatValue(); //BigDecimal -> float
double double_bigNum = bigDecimal.doubleValue(); //BigDecimal -> double
String String_bigNum = bigDecimal.toString(); //BigDecimal -> String
BigDecimal 클래스를 기본 타입으로 형 변환을 해야 할 경우에는 위와 같이 하시면 됩니다.
BigDecimal 두 수 비교
BigDecimal bigNumber1 = new BigDecimal("100000.12345");
BigDecimal bigNumber2 = new BigDecimal("1000000.6789");
//두 수 비교 compareTo 맞으면 0 틀리면 -1
int compare = bigNumber1.compareTo(bigNumber2);
System.out.println(compare);
BigDecimal의 값을 비교할 때는 compareTo라는 메서드를 사용합니다.
※ 큰 정수 다루기 BigIntger의 사용법은 아래 링크를 참고해주세요.
[Java] 큰 숫자(정수) 다루기 BigInteger 사용법 & 예제 총정리
'Language > Java' 카테고리의 다른 글
[Java] 자바 문자열(String)에 " 큰 따옴표 넣기 (0) | 2021.05.24 |
---|---|
[Java] 자바 숫자에 천단위 콤마찍기 (금액 표기하기) (1) | 2021.05.20 |
[Java] 큰 숫자(정수) 다루기 BigInteger 사용법 & 예제 총정리 (6) | 2020.09.10 |
[Java] PriorityQueue(우선순위 큐) 클래스 사용법 & 예제 총정리 (7) | 2020.09.09 |