반응형

 

📝BigDecimal

Java 언어에서 숫자를 정밀하게 저장하고 표현할 수 있는 유일한 방법이다.
소수점을 저장할 수 있는 가장 크기가 큰 타입인 double은 소수점의 정밀도에 있어 한계가 있어 값이 유실될 수 있다.
Java 언어에서 돈과 소수점을 다룬다면 BigDecimal은 선택이 아니라 필수이다

 

BigDecimal 단점

  • 느린 연산 처리 속도
  • 기보타입에 비해 많은 양의 리소스 차지
  • 기본 타입보다 조금 불편한 사용법

 

double vs BigDecimal

  • double 타입
    • 내부적으로 수를 저장할 때 이진수의 근사치를 저장한다 (64비트 부동 소수점 자료형)
  • BigDecimal 타입
    • 내부적으로 수를 십진수로 저장하여 아주 작은 수과 큰 수의 연산에 대해 거의 무한한 정밀도를 보장한다

 

package hello.exception;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

public class study {

    public static void main(String[] args) {

        BigDecimal bigDecimalA = new BigDecimal("10.0000000000");
        BigDecimal bigDecimalB = new BigDecimal("3.000000000");

        DecimalFormat decimalFormat = new DecimalFormat("0.0000000000000000000000");

        double a = 10.0000000000;
        double b = 3.000000000;

        /** a / b -> 기대값: 3.333333333333 **/

        System.out.println(decimalFormat.format(a / b)); // 출력값 : 3.3333333333333335000000


        // 20자리까지 표현하고 그 이후에는 반올림을 한다
        BigDecimal result = bigDecimalA.divide(bigDecimalB, 20, RoundingMode.HALF_UP);
        System.out.println(result); // 출력값 : 3.33333333333333333333


    }
}

 

🔗 참고 및 출처

https://jsonobject.tistory.com/466#:~:text=BigDecimal%EC%9D%80%20Java%20%EC%96%B8%EC%96%B4%EC%97%90%EC%84%9C,%EC%9D%B4%20%EC%9C%A0%EC%8B%A4%EB%90%A0%20%EC%88%98%20%EC%9E%88%EB%8B%A4.

반응형