공부하려구요 2023. 8. 11. 17:03
728x90
반응형

BigDecimal

  • BigDecimal은 Java 언어에서 숫자를 정밀하게 연산할 수 있는 방법이다.
  • Java에서 돈과 소수점을 다룬다면 BigDecimal을 사용한다.
public class BigDecimalExample {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("0.1");
        BigDecimal b = new BigDecimal("0.2");
        BigDecimal result = a.add(b);

        System.out.println("0.1 + 0.2 = " + result);
    }

 

BigDecimal 초기화 방법

  • double 타입으로부터 BigDecimal을 초기화할 때는 문자열의 형태로 초기화 함
double doubleValue = 0.1;
BigDecimal decimalValue = new BigDecimal(String.valueOf(doubleValue));

 

BigDecimal의 사칙 연산

BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("3");

a.add(b); // 더하기

a.subtract(b); // 빼기

a.multiply(b); // 곱하기

a.divide(b, 3, RoundingMode.HALF_EVEN); // 나누기

a.remainder(b, MathContext.DECIMAL128); //나머지

new BigDecimal("-3").abs(); // 절대값

a.min(b); // 두 수 중 최소값

a.max(b); // 두 수 중 최대값

 

BigDecimal 비교 연산

  • BigDecimal은 == 연산을 사용할 수 없다
  • equals(), compareTo()을 사용함
BigDecimal a = new BigDecimal("2.01");
BigDecimal b = new BigDecimal("2.010");

a == b; // false

// 값의 비교를 위해 사용, 소수점 맨 끝의 0까지 완전히 값이 동일해야 true 반환
a.equals(b); // false

// 값의 비교를 위해 사용, 소수점 맨 끝의 0을 무시하고 값이 동일하면 0, 적으면 -1, 많으면 1을 반환
a.compareTo(b); // 0

 

BigDecimal 소수점 처리

  1.  소수점 이하를 절사하기 (RoundingMode.FLOOR)
  2.  소수점 이하를 절사하고 1을 증가시키기 (RoundingMode.CEILING)
  3. 소수점 자리수에서 오른쪽의 0 부분을 제거한 겂을 반환 (strip TrailingZeros)
  4. 반올림 (RoundingMode.HALF_EVEN)
new BigDecimal("1.1234567890").setScale(0, RoundingMode.FLOOR); // 소수점 이하를 절사한다.
// 1

// 2
new BigDecimal("1.1234567890").setScale(0, RoundingMode.CEILING); // 소수점 이하를 절사하고 1을 증가시킨다.
// 음수에서는 소수점 이하만 절사한다.
// 2

new BigDecimal("-1.1234567890").setScale(0, RoundingMode.CEILING); // 음수에서는 소수점 이하만 절사한다.
// -1


new BigDecimal("0.99990").stripTrailingZeros(); // 소수점 자리수에서 오른쪽의 0 부분을 제거한 값을 반환한다.
// 0.9999

new BigDecimal("0.1234").setScale(0, RoundingMode.HALF_EVEN); // 소수점을 남기지 않고 반올림한다.
// 0
new BigDecimal("0.9876").setScale(0, RoundingMode.HALF_EVEN);
// 1
728x90
반응형