티스토리 뷰

Java/Class

[java.math] BigDecimal

MinChyang 2018. 1. 10. 15:05

BigDecimal Class



◎ Define


- BigDecimal Class는 무한한 크기의 부동소수점 숫자를 보다 정확하게 다루기 위한 Class이다.



◎ Field, Constructor, Method 정보


< Click >



◎ 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
댓글
Notice
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
Link
«   2025/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
글 보관함