티스토리 뷰
BigDecimal Class
◎ Define
- BigDecimal Class는 무한한 크기의 부동소수점 숫자를 보다 정확하게 다루기 위한 Class이다.
◎ Field, Constructor, Method 정보
◎ Explanation
① 왜 float, double을 두고 BigDecimal을 사용하는 걸까?
실수를 연산할 때 float, double 타입 사용에 주의해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public class MainUser { public static void main(String[] args) { double num1 = 2.0; float num2 = 1.1F; System.out.println("[1. 실수의 보통 연산] = " + (num1 - num2)); BigDecimal bd1 = new BigDecimal(num1); BigDecimal bd2 = new BigDecimal(num2); System.out.println("[2. BigDecimal Class와 subtract() Method를 이용한 실수 연산] = " + bd1.subtract(bd2)); BigDecimal b3 = new BigDecimal(String.valueOf(num1)); BigDecimal b4 = new BigDecimal(String.valueOf(num2)); System.out.println("[3. BigDecimal Class와 subtract() Method를 이용한 문자열 연산] = " + b3.subtract(b4)); // Result1 = 0.899999761581421 // Result2 = 0.8999997615814208984375 // Result3 = 0.9 } } | cs |
위 예제에서는 3가지 방법으로 뺄셈 연산(2.0 - 1.1)을 하고 있다.
원하는 결과는 0.9일 것이다.
1. Primitive Type인 double 변수와 float 변수의 - 연산
2. BigDecimal Class의 subtract(float or double) Method를 이용한 - 연산
3. BigDecimal Class의 subtract(String) Method를 이용한 - 연산
1.의 경우 컴퓨터가 숫자 1.1을 double로 정확하게 표현할 수 없어 근사치를 출력하기 때문이다.
2.의 경우도 위와 마찬가지이다. 단, 결과가 1. 의 경우보다 더 큰 이유는 BigDecimal Class 자체가 더 큰 값을 표현하기 위한 Class이기 때문이다.
3.의 경우는 정상적인 값이 출력된다. 즉, BigDecimal을 생성 할 때 인자값으로 float, double 값이 아닌 String 값을 넣어 줘야 정확한 연산이 가능하다.
'Java > Class' 카테고리의 다른 글
| [java.lang] Void (0) | 2018.01.10 |
|---|---|
| [java.math] BigInteger (0) | 2018.01.10 |
| [java.lang] Double (0) | 2018.01.10 |
| [java.lang] Float (0) | 2018.01.10 |
| [java.lang] Long (0) | 2018.01.10 |
댓글
