프로그래밍언어/Java

[Java] 큰 소수를 다루기 위한 BigDecimal 개념 및 사용방법

멍토 2024. 4. 8.

 

 

BigDecimal 소개

자바의 BigDecimal 클래스는 부동 소수점 연산에 있어 높은 정확도를 제공한다. 이 클래스는 금융 계산, 과학 계산 등에서 정확한 숫자 처리가 필수적일 때 사용된다.

BigDecimal의 주요 메서드

BigDecimaladd(), subtract(), multiply(), divide() 등의 사칙연산 메서드를 포함한다.

코드는 실제로 돌려보면서 무슨 차이인지 확인해보면 좋다.

사칙연산 예제


import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("10.75");
        BigDecimal num2 = new BigDecimal("2.50");

        BigDecimal sum = num1.add(num2);
        BigDecimal difference = num1.subtract(num2);
        BigDecimal product = num1.multiply(num2);
        BigDecimal quotient = num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP);

        System.out.println("Sum: " + sum);
        System.out.println("Difference: " + difference);
        System.out.println("Product: " + product);
        System.out.println("Quotient: " + quotient);
    }
}
        

 

BigDecimal 스케일 조정 예제


import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {
        BigDecimal original = new BigDecimal("123.456789");
        // 반올림
        BigDecimal roundHalfUp = original.setScale(3, RoundingMode.HALF_UP);
        // 반내림
        BigDecimal roundHalfDown = original.setScale(3, RoundingMode.HALF_DOWN);
        // 올림
        BigDecimal roundCeiling = original.setScale(3, RoundingMode.CEILING);
        // 내림
        BigDecimal roundFloor = original.setScale(3, RoundingMode.FLOOR);

        System.out.println("Original: " + original);
        System.out.println("Rounded Half Up: " + roundHalfUp);
        System.out.println("Rounded Half Down: " + roundHalfDown);
        System.out.println("Rounded Ceiling: " + roundCeiling);
        System.out.println("Rounded Floor: " + roundFloor);
    }
}

BigDecimal에서 다른 자료형으로의 형 변환 예제


import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal bigDecimal = new BigDecimal("12345.6789");

        long longValue = bigDecimal.longValue();
        int intValue = bigDecimal.intValue();
        double doubleValue = bigDecimal.doubleValue();
        String stringValue = bigDecimal.toString();

        System.out.println("Long value: " + longValue);
        System.out.println("Int value: " + intValue);
        System.out.println("Double value: " + doubleValue);
        System.out.println("String value: " + stringValue);
    }
}
        

BigDecimal끼리 비교하는 예제


import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("123.45");
        BigDecimal num2 = new BigDecimal("123.45");

        if (num1.compareTo(num2) > 0) {
            System.out.println(num1 + " is greater than " + num2);
        } else if (num1.compareTo(num2) < 0) {
            System.out.println(num1 + " is less than " + num2);
        } else {
            System.out.println(num1 + " and " + num2 + " are equal");
        }
    }
}
        

장단점 분석

BigDecimal의 가장 큰 장점은 높은 정확도를 제공한다는 것이다. 반면, 기본 자료형보다 처리 속도가 느리고 메모리 사용량이 많다는 단점도 있다.

 

댓글

💲 광고입니다.