본문 바로가기

Study/Tips

자바 숫자 표현(BigDecimal)

끔 계산을 하다 보면 1.2314E, 1.2189E-3 이런식으로 결과가 표현될 때가 있다.

너무 길기 때문에 숫자 전체가 아니라 지수를 이용해서 표현하는 것인데, 이는 Math클래스의 BigDecimal, BigInteger를 이용해서 해결 할 수 있다.


외부 클래스를 이용하는 것이기 때문에, 먼저 import가 필요하다.


| BigDecimal, BigInteger

//import java.math.*;

BigDecimal n1 = new BigDecimal(1.284E6);
BigDecimal n2 = new BigDecimal(3.5263E-2);

System.out.println("1.284E6 →"+ n1);
System.out.println("3.5263E-2 →"+n2);


실행결과:






| BigDecimal_사칙연산


//원래 수.subtract(뺄 수)
//원래 수.divide(나눌 수)

BigDecimal add = n1.add(n2); // +
BigDecimal sub = n1.subtract(n2); // -
BigDecimal mul = n1.multiply(n2); // ×
// BigDecimal div = n1.divide(n2); // ÷. 오류가 뜬다. 표현가능 범위 초과
BigDecimal rem = n1.remainder(n2); // %

나누는 식에서 오류가 발생했다.

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.


너무 큰 수를 쓰다 보니 표현범위를 넘어섰나보다.

반올림/버림 등으로 표현하는 수의 자리수를 제한하여 해결할 수 있다.



BigDecimal div = n1.divide(n2,3,BigDecimal.ROUND_CEILING); // ÷. (나눌 수, 표현범위, 수 다듬는 법)
BigDecimal div1 = n1.divide(n2,4,RoundingMode.CEILING); // ÷. (나눌 수, 표현범위, 수 다듬는 법)

결과:





| BigDecimal_ 수 다듬기


맨 위에서 썼던 new BigDecimal은 수가 더럽다. 필요 이상으로 길다.

너무 긴 수를 간단하게 다듬어 보자.



valueOf

BigDecimal n1 = new BigDecimal(1.284E6);
BigDecimal n2 = new BigDecimal(3.5263E-2);

BigDecimal n3 = BigDecimal.valueOf(1.284E6);
BigDecimal n4 = BigDecimal.valueOf(3.5263E-2);

결과:




BigDecimal.Round

BigDecimal div = n1.divide(n2,3,BigDecimal.ROUND_CEILING);  // ÷. (나눌 수, 표현범위, 수 다듬는 법)
BigDecimal div1 = n1.divide(n2,4,RoundingMode.CEILING); // ÷. (나눌 수, 표현범위, 수 다듬는 법)
//BigDecimal n5 = n1.add(n2,BigDecimal.ROUND_DOWN); 오류
//BigDecimal n6 = n1.subtract(n2,3,BigDecimal.ROUND_FLOOR); 오류
//BigDecimal n7 = n1.multiply(n2,3, BigDecimal.ROUND_UP); 오류

반올림, 버림등의 BigDecimal.Round~는 나눗셈에서만 작동하는 것 같다.

덧셈 뺼셈 곱셈 등에서는 오류가 떴다.











'Study > Tips' 카테고리의 다른 글

17.05.31.gui진행상황 / 06.01 / 06.02 / 06.04  (0) 2017.05.31
자바 숫자 반올림/버림/내림  (0) 2017.03.19
자바 준비물  (0) 2017.03.12
0. OOP(객체 지향 프로그래밍)  (0) 2017.03.12
IntelliJ 단축키  (0) 2016.12.19