[java] BigDecimal

JH·2024년 4월 15일

java

목록 보기
20/21

BigDecimal의 표현 범위

BigDecimal은 float와 double이 표현하는 범위보다 더 큰 범위의 숫자를 저장할 수 있습니다.

  • float : 1.4E-45 ~ 3.4028235E38
  • double : 4.9E-324 ~ 1.7976931348623157E308
  • BigDecimal : 무한 (Infinity)1.

BigDecimal의 선언 및 연산

  • new BigDecimal("10000.12345") 처럼 생성자에 문자열로 된 숫자를 전달하여 BigDecimal를 생성 및 초기화.
  • add(), multiply(), subtract(), divide(), remainder() 등의 함수를 이용하여 BigDecimal 끼리 연산을 할 수 있고, 결과는 BigDecimal로 리턴.

예시

import java.math.BigDecimal;
public class Example {
    public static void main(String[]  args) {
        BigDecimal  n1  = new BigDecimal("100000.12345");
        BigDecimal  n2  = new BigDecimal("10000");
        System.out.println("n1 + n2 = " +  n1.add(n2));
        System.out.println("n1 - n2 = " +  n1.subtract(n2));
        System.out.println("n1 * n2 = " +  n1.multiply(n2));
        System.out.println("n1 / n2 = " +  n1.divide(n2));
        System.out.println("n1 % n2 = " +  n1.remainder(n2));
    }
}

출력

n1 + n2 = 110000.12345
n1 - n2 = 90000.12345
n1 * n2 = 1000001234.500000
n1 / n2 = 10.000012345
n1 % n2 = 0.12345

BigDecimal의 형변환

BigDecimal는 아래와 같이 int, long, float, double, String 등의 기본 타입으로 변환할 수 있습니다.

예시

import java.math.BigDecimal;
public class Example {
    public static void main(String[]  args) {
        BigDecimal  n  = new BigDecimal("54321");
        int  i  =  n.intValue();
        long  l  =  n.longValue();
        float  f  =  n.floatValue();
        double  d  =  n.doubleValue();
        String  s  =  n.toString();
    }
}

BigDecimal의 크기 비교

BigDecimal 객체끼리 크기 비교를 할 때 compareTo()를 사용할 수 있습니다.
n1.compareTo(n2)는 1, 0, -1을 리턴할 수 있으며 각각 아래와 같은 의미가 됩니다.

  • 1 : n1이 더 크다
  • 0 : n1과 n2가 같다
  • -1 : n2가 더 크다

예시

import java.math.BigDecimal;
public class Example {
    public static void main(String[]  args) {
        BigDecimal  n1  = new BigDecimal("100000.12345");
        BigDecimal  n2  = new BigDecimal("1000000.6789");
        System.out.println("n1.compareTo(n2) = " +  n1.compareTo(n2));
    }
}

출력

n1.compareTo(n2) = -1
profile
발전하는 백엔드 개발자

0개의 댓글