상세 컨텐츠

본문 제목

BigDecimal 사칙연산 (JAVA 계산)

프로그램 언어/Java

by husks 2014. 3. 18. 16:33

본문

반응형


java에서 소수점 이하 연산에 대한 지원이 부족하여 계산에 관해서는 BigDecimal 를 권장 하고 있습니다.

아래에 예제 소스를 기록 하였습니다.

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
32
33
34
35
import java.math.BigDecimal;
 
 
public class BigDecimalTest {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        BigDecimal decimal1 = new BigDecimal("6.675");
        BigDecimal decimal2 = new BigDecimal("3");
 
        //덧셈
        System.out.println(decimal1+"+"+decimal2+"="+decimal1.add(decimal2)+" : 덧셈");
 
        //뺄셈
        System.out.println(decimal1+"-"+decimal2+"="+decimal1.subtract(decimal2)+" : 뺄셈");
 
        //곱셈
        System.out.println(decimal1+"*"+decimal2+"="+decimal1.multiply(decimal2)+" : 곱셈");
 
        //나눗셈
        System.out.println(decimal1+"/"+decimal2+"="+decimal1.divide(decimal2)+" : 나눗셈");
        System.out.println(decimal1+"/"+decimal2+"="+decimal1.divide(decimal2, 2, BigDecimal.ROUND_UP)+" : 나눗셈(올림)");
        System.out.println(decimal1+"/"+decimal2+"="+decimal1.divide(decimal2, 2, BigDecimal.ROUND_DOWN)+" : 나눗셈(내림)");
        System.out.println(decimal1+"/"+decimal2+"="+decimal1.divide(decimal2, 2, BigDecimal.ROUND_CEILING)+" : 나눗셈(양수 올림, 음수 내림)");
        System.out.println(decimal1+"/"+decimal2+"="+decimal1.divide(decimal2, 2, BigDecimal.ROUND_FLOOR)+" : 나눗셈(양수 내림, 음수 올림)");
        System.out.println(decimal1+"/"+decimal2+"="+decimal1.divide(decimal2, 2, BigDecimal.ROUND_HALF_UP)+" : 나눗셈(5이상 올림)");
        System.out.println(decimal1+"/"+decimal2+"="+decimal1.divide(decimal2, 2, BigDecimal.ROUND_HALF_DOWN)+" : 나눗셈(5초과 올림)");
        
    }
 
}


결과



나눗셈을 진행하다 보면 Non-terminating decimal expansion; no exact representable decimal result. 오류가 발생하게 되는데 해당 부분은 divide 메소드 사용시 10을 3으로 나누는 것 처럼 소수점이 무한대로 떨어지기 때문입니다.

그래서 divide 메소드를 사용하실 때 주의 하셔야 하고 해당 부분에 대한 자리수 및 올림, 내림을 설정해 주셔야 합니다.

위에 메소드에 입력될 파라미터를 설명 드리면 아래와 같습니다.

decimal1.divide(decimal2, 2=>보여줄 자리수, BigDecimal.ROUND_UP=>올림 내림 타입)

보여줄 자리수가 두자리수라면 세자리수의 값을 가지고 올릴지 말지를 판단하여 계산 하는 방식 입니다.



반응형

관련글 더보기

댓글 영역