[Java/자바] 숫자 천자리 구분, 소수점 표기 방법(DecimalFormat)

DecimalFormat 클래스

자바에서는 숫자의 Format을 변경할 수 있는 클래스를 제공하는데,

NumberFormat을 상속받는 DecimalFormat클래스를 이용해 천자리마다 구분선을 넣는다던가, 소숫점 몇자리까지 포함할 것인지 정할 수 있습니다.

 

패턴 의미
0 10진수, 빈자리는 0으로 채운다.
# 10진주, 빈자리는 채우지 않는다.
. 소수점 표시
, 단위 구분 기호 표시
+, - 음수, 양수 표시
E 지수 문자
; 양수와 음수 패턴을 모두 사용할 경우
패턴 구분자
% 100을 곱하고 %를 붙인다.
\u00A4 통화 표시 \을 붙인다.

 

예시 코드
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        double n = 123.456;

        // 0 패턴 : 빈자리는 0으로 채운다.
        DecimalFormat df = new DecimalFormat("0");
        System.out.println(df.format(n)); // 출력값 : 123

        // ; 패턴 : 음수 양수 둘다 표시
        df = new DecimalFormat("+0.0; -0.0");
        System.out.println(df.format(n)); // 출력값 : +123.5

        // + or - 패턴 : 음수 또는 양수 표시
        df = new DecimalFormat("-000000.00000");
        System.out.println(df.format(n)); // 출력값 : -000123.45600


        // # 패턴 : 0과 달리 빈자리를 채우지 않는다.
        df = new DecimalFormat("###########");
        System.out.println(df.format(n)); // 출력값 : 123

        // . 패턴 : 소수점 표시
        df = new DecimalFormat("######.#####");
        System.out.println(df.format(n)); // 출력값 : 123.456

        // , 패턴 : 단위 구분 기호 표시 ( 천자리 구분 )
        df = new DecimalFormat("#,###.00000");
        System.out.println(df.format(n)); // 출력값 : 123.45600

        // % 패턴 : 100을 곱한 후 문자에 %를 붙인다.
        df = new DecimalFormat("#.##%");
        System.out.println(df.format(n)); // 출력값 : 12345.6%
        
        // \u00A4 패턴 : 통화표시 ₩을 붙인다.
        df = new DecimalFormat("\u00A4####.##");
        System.out.println(df.format(n)); // 출력값 : ₩123.46

        /*
         * NumberFormat을 이용하여 통화표시를 지정
         * Locale을 사용하여 국가 지정시 해당 국가의 통화기호 및 자리수 구분까지 된다.
         */
        NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.KOREA);
        // 소수점 2자리까지 지정
        nf.setMaximumFractionDigits(2);
        System.out.println(nf.format(n)); // 출력값 : ₩123.46
    }
}

참고자료
https://jamesdreaming.tistory.com/203
https://all-record.tistory.com/192