반응형

1. BigDecimal

BigDecimal은 무한한 크기의 부동소수점 숫자를 다루기 위한 것이다. Java API - BigDecimal을 참고


1.1 사칙 연산

BigDecimal도 BigInteger와 거의 유사한 방식으로 숫자를 다룬다.


BigDecimal constructor의 argument는 string입력이다. 

사칙연산을 위해서는 기본 사칙 연산 기호(+-*/)를 사용할 수 없고 다음의 method를 사용해야 한다. (a, b는 BigDecimal)


a.add(b)

a.subtract(b)

a.multiply(b)

a.divide(b,BigDecimal.ROUND_UP) 

- 소수 첫째 자리에서 올림 (ROUND_DOWN, ROUND_CEILING, ROUND_FLOOR, ROUND_HALF_DOWN/UP/EVEN 등이 있음)

d.divide(b, n, BigDecimal.ROUND_UP) 

- 소수점 n자리에서 올림

참고로, 일반 integer를 입력하려면 BigDecimal.valueOf(숫자) 형태로 입력한다. 


예제는 다른 곳에 올라 온것을 참고해 다음과 같다.

BigDecimal b1 = new BigDecimal("0.3);

 BigDecimal b2 = new BigDecimal("0.4");

 System.out.println(b1.add(BigDecimal.valueOf(0.5)));

 System.out.println(b1.multiply(b2));

 System.out.println(b1.divide(b2, BigDecimal.ROUND_UP));

 System.out.println(b1.divide(b2, 5, BigDecimal.ROUND_UP));

출력은 다음과 같다.

0.9

 0.12

 1.4

 1.33334


1.2 Arrays.sort() 사용 예

N개의 BigDecimal 입력을 받아서 sorting하는 예를 통해 BigDecimal의 사용을 알아본다.

N개의 BigDecimal로 변환 가능한 String 입력을 받아서 이를 큰 것에서 작은 순으로 정렬하는 예를 살펴보자. 

그리고, 입력의 수보다 Array에 미리 할당한 크기가 더 크게 하여 Arrays.sort()에서 처리방법을 볼수 있다

예제는 다른 사이트에 올라 온것을 참고해 다음과 같다.

9 //9개 data INPUT

data 1 : -100

data 2 : 50

data 3 : 0

data 4 : 56.6

data 5 : 90

data 6 : 0.12

data 7 : .12

data 8 : 02.34

data 9 : 000.000

method Coding

import java.math.BigDecimal;

 import java.util.*;


 public class Solution {


    public static void main(String[] args) {

        Scanner sc= new Scanner(System.in);

        int n=sc.nextInt();

        String []s=new String[n+2];

        for(int i=0;i<n;i++){

            s[i]=sc.next();

        }

        sc.close();


        //Arrays.sort()를 이용 descending order로 sorting. 이때 범위는 0~n-1까지

        Arrays.sort(s, 0, n, (s1, s2)->(new BigDecimal(s2).compareTo(new BigDecimal(s1)))); 


        for(int i=0;i<n;i++) {

            System.out.println(s[i]);

        }

    }

 }

출력은 다음과 같다.

 90

 56.6

 50

 02.34

 0.12

 .12

 0

 000.000

 -100







반응형

+ Recent posts