Exp/Java & Java Script

[Java] DecimalFormat으로 천단위에 점을 찍자

kilog 2024. 5. 15. 19:52
728x90

안녕하세요 ki입니다.

이번 Exp는 DecimalFormat입니다.

저는 은행권 프로젝트를 다수 참여했었는데 그중 많이 사용했던 클래스를 소개하려고 합니다.

이전 글에서 설명하면서 말씀드렸던 것 처럼 증명서 작업 중에도 사용하여 금액을 표시하기도 했습니다.

2024.05.14 - [Exp/Java & Java Script] - [JS] 숫자 금액을 한글 금액으로 바꾸기를 했다.

 

[JS] 숫자 금액을 한글 금액으로 바꾸기를 했다.

안녕하세요 ki입니다.이번 Exp는 자바스크립트를 이용한 숫자를 한글로 변환하는 방법입니다.저는 은행 프로젝트를 참여하며 증명서 작업을 참 많이 했습니다. 그중 "잔액증명서"라는 것도 알게

kkkkt.tistory.com

 

 

DecimalFormat

DecimalFormat은 java에 java.text에 NumberFormat을 상속받아 숫자의 형식을 패턴을 지정하여 원하는 형식으로 표시할 수 있습니다.

 

 

Ex

import java.text.DecimalFormat;


public class Main {
    public static void main(String[] args) {

        DecimalFormat df = new DecimalFormat("#,###");
        double num = 100000000;
        String num2 = df.format(num);
        System.out.print(num2);
    }
    
}

 

위 코드로 DecimalFormat객체를 생성하여 format 메서드를 사용하여 형식을 변경할 수 있습니다.

format으로 변경 후에 결과는 문자열인 String타입으로 반환됩니다.

 

위 코드를 실행하여 얻은 결과

 

 

패턴's

패턴  설명
0 숫자가 없을때 0으로 표시 (ex : 0000)
# 숫자가 있을때 해당 자리 표시 (ex : ####)
. 소수점 구분 기호 또는 화폐 소수점 구분 기호 (ex : 000.0 / ###.#)
- 빼기 기호 (ex : -###.##)
, 단위 구분 기호 (ex : #,###)
E 지수표시 (ex : 0.00E0)
; 양수 하위 패턴과 음수 하위 패턴을 분리합니다. (ex : +#.##;-#.##)
% 100을 곱하여 백분율로 표시 (ex : #.###%)
\u2030 1000을 곱하여 표시 (ex : \u2030####.##)
\u00A4 통화 표시를 표시. (ex : \u00A4####.##)
' 접두사 또는 접미사에서 특수 문자를 인용하는 데 사용(ex : "'#'#"123  )

 

 

 

 // 10진수 - 빈자리는 0으로 채움
        double n = 12345.6789;
        System.out.println(df.format(n)); // 출력값 : 12346

        // 10진수 - 빈자리는 0으로 채움
        df = new DecimalFormat("0.0");
        System.out.println(df.format(n)); // 출력값 : 12345.7

        // 10진수 - 빈자리는 0으로 채움
        df = new DecimalFormat("000000.00000");
        System.out.println(df.format(n)); // 출력값 : 012345.67890

        // 10진수 - 빈자리는 채우지 않음
        df = new DecimalFormat("#");
        System.out.println(df.format(n)); // 출력값 : 12346

        // 10진수 - 빈자리는 채우지 않음
        df = new DecimalFormat("######.###");
        System.out.println(df.format(n)); // 출력값 : 12345.679

        // 10진수 - # 0 조합 / 단위구분을 위한 , 추가
        df = new DecimalFormat("#,###.00000");
        System.out.println(df.format(n)); // 출력값 : 12,345.67890

        // 100을 곱한 후 문자에 % 붙임
        df = new DecimalFormat("#.##%");
        System.out.println(df.format(n)); // 출력값 : 1234567.89%

        // 통화표시 \u00A4
        df = new DecimalFormat("\u00A4####.##");
        System.out.println(df.format(n)); // 출력값 : ₩12345.68

        // NumberFormat을 이용하여 통화표시를 지정할 수 있다.
        // Locale을 사용하여 국가 지정시 해당 국가의 통화기호 및 자리수 구분까지 된다.
        NumberFormat nf = NumberFormat.getCurrencyInstance( Locale.KOREA );

        // 소수점 2자리까지 지정
        nf.setMaximumFractionDigits(2);
        System.out.println(nf.format(n)); // 출력값 : ₩12,345.68

 

 

 

주요 메서드

메소드 설명
format(Object number) 숫자를 지정된 형식에 맞게 문자열로 변환
parse(String source) 자열을 Number 객체로 변환
setDecimalFormatSymbols(DecimalFormatSymbols newSymbols) 형식화에 사용되는 기호를 설정
setMaximumFractionDigits(int newValue) 소수점 이하 최대 자릿수를 설정 
setMinimumFractionDigits(int newValue) 소수점 이하 최소 자릿수를 설정 
setMaximumIntegerDigits(int newValue) 정수 부분의 최대 자릿수를 설정
setMinimumIntegerDigits(int newValue) 정수 부분의 최소 자릿수를 설정
setGroupingUsed(boolean newValue) 그룹화(천 단위 구분 기호) 사용 여부를 설정
setRoundingMode(RoundingMode roundingMode) 반올림 모드를 설정
(RoundingMode.UP
RoundingMode.DOWN
RoundingMode.HALF_UP)
getDecimalFormatSymbols() 현재 DecimalFormatSymbols 객체를 반환
getMaximumFractionDigits() 소수점 이하 최대 자릿수를 반환
getMinimumFractionDigits() 소수점 이하 최소 자릿수를 반환
getMaximumIntegerDigits()  정수 부분의 최대 자릿수를 반환
getMinimumIntegerDigits() 정수 부분의 최소 자릿수를 반환
isGroupingUsed() 천 단위 구분 기호 사용 여부를 반환(boolen)
getRoundingMode() 현재 설정된 반올림 모드를 반환
setParseBigDecimal(boolean newValue) true로 설정하면 parse 메소드가 BigDecimal을 반환
isParseBigDecimal() parseBigDecimal 설정 여부를 반환