본문 바로가기
Java/Java

자바 천단위 콤마 찍기 (addComma)

by 산코디 2023. 1. 28.




안녕하세요.
오늘은 자바에서 숫자 천 단위 콤마 찍는 방법을 포스팅하려고 합니다. 숫자에서 천 단위 콤마를 찍는 이유는 결과 데이터를 볼 때 가독성이 좋게 하려는 이유가 큽니다. 물론 다른 이유가 있을 수도 있습니다! 천 단위 기준으로 콤마를 찍어주는 방법은 간단하지만 이러한 간단한 스킬을 많이 가지고 있으면 개발 업무를 볼 때 많은 도움이 됩니다. :)

그럼 예제를 통해서 하나씩 배워보도록 하겠습니다!


1. long 타입 천단위 콤마

public static void main(String[] args) {
	// 1000000 콤마 추가
    System.out.println(addComma(1000000));
}
    
public static String addComma (long num) {
	// DecimalFormat을 이용하여 3자릿수마다 comma 설정
    DecimalFormat format = new DecimalFormat("###,###");
    
    return format.format(num);
}

long 타입의 값을 받아서 콤마를 찍어주는 함수를 만들어 줬습니다. 콤마를 찍어주기 위해 DecimalFormat class를 사용했고, 천 단위이기 때문에 3 자릿수마다 ","를 찍어주는 "###,###" 패턴을 추가해 줬습니다.
그럼 결과를 확인해 볼까요?


실행 결과

실행 결과는 정확히 3자릿수마다 콤마를 찍어줬습니다!

위의 예제는 long 타입만 받아서 처리하기 때문에 정수값만 콤마를 찍어주게 됩니다. 하지만 소수점을 포함한 실수값도 동일하게 콤마를 적용해야 하는 경우가 있는데요! 그런 경우에는 어떻게 처리하는지 다음 예제로 넘어가 보겠습니다~


2. double 타입 천단위 콤마

public static void main(String[] args) {
	// 1000000.123 콤마 추가
    System.out.println(addComma(1000000.123));
}
    
public static String addComma (double num) {
	// DecimalFormat을 이용하여 3자릿수마다 comma 설정
    DecimalFormat format = new DecimalFormat("###,###.##");
    
    return format.format(num);
}

이번에는 실수값을 처리할 수 있도록 인자값의 타입을 double로 변경해 줬습니다. double로 변경했을 경우에는 소수점을 제외하고 콤마를 찍어줘야 하기 때문에 DecimalFormat 패턴 값을 조금 변경해 줬습니다.
"###,###.##"
.##를 붙여주게 되면 소수점 단위 몇 번째 반올림처리를 할지 설정할 수 있습니다. "#"가 2개를 붙여줬기 때문에 소수점 2자리가 되겠네요!
입력값을 1000000.123을 넘겼을 경우 정상적으로 콤마가 추가되는지 확인해 보겠습니다.


실행 결과

실행 결과는 입력값 1000000.123에서 소수점 2 자릿수로 반올림 처리를 하고 정수부분만 콤마를 잘 찍어줬습니다.
여기까지 하면 long 타입과 double 타입의 콤마 처리를 하는데 크게 문제가 없습니다. 하지만 저는 조금 더 욕심을 내서 double 타입을 처리할 때 소수점 자릿수를 지정해 줄 수 있도록 해주면 좋을 것 같아서 함수를 조금 변경해 봤습니다. 다음 예제를 보겠습니다.


3. double 타입 천단위 콤마 소수점 자리 지정

public static void main(String[] args) {
	// 1000000.1234 콤마 추가, 소수점 2자리까지
    System.out.println(addComma(1000000.1234, 2));
}
    
public static String addComma (double num, int cnt) {
	// DecimalFormat을 이용하여 3자릿수마다 comma 설정
    String formatPattern = "###,###";
		
    for (int i = 0; i < cnt; i++) {
        formatPattern += i == 0 ? ".#" : "#";
    }

    DecimalFormat format = new DecimalFormat(formatPattern);
        
    return format.format(num);
}

double 입력값의 콤마를 처리해 주는 함수에서 자릿수를 지정할 수 있는 cnt를 추가해 줬습니다. 그다음은 cnt 수만큼 for문을 돌려 소수점 자리를 추가해 줄 수 있도록 다이내믹하게 처리를 해줬습니다. 그러면 입력하는 값마다 원하는 자릿수의 소수점 처리가 가능합니다!
입력값은 1000000.1234로 소수점 4자리까지 있으며, 나타내고자 하는 소수점은 2자릿수로 인자값을 넣었습니다.
addComma(1000000.1234, 2)

그럼 실행 결과를 확인해 보겠습니다.


실행 결과

실행 결과는 소수점 두자리까지 깔끔하게 잘 나왔습니다. :)

마지막으로 오늘 예제로 만든 세 종류의 함수를 오버로드시켜 한 번에 사용할 수 있도록 해봤습니다.

반응형

3. addComma() 타입별 오버로드

public static void main(String[] args) {
		
    System.out.println(addComma(1000000));
    System.out.println(addComma(1000000.1234));
    System.out.println(addComma(1000000.1234, 3));
}

/**
 * 정수 천단위 콤마 처리
 * 
 * @param num
 * @return
 */
public static String addComma (long num) {
    DecimalFormat format = new DecimalFormat("###,###");
    return format.format(num);
}

/**
 * 실수 천단위 콤마 처리 (소수점 처리 추가)
 * @param num
 * @return
 */
public static String addComma (double num) {
    DecimalFormat format = new DecimalFormat("###,###.##");
    return format.format(num);
}

/**
 * 실수 천단위 콤마 처리 (소수점 자릿수 지정 처리 추가)
 * 
 * @param num
 * @param cnt
 * @return
 */
public static String addComma (double num, int cnt) {
    String formatPattern = "###,###";

    for (int i = 0; i < cnt; i++) {
        formatPattern += i == 0 ? ".#" : "#";
    }

    DecimalFormat format = new DecimalFormat(formatPattern);

    return format.format(num);
}

최종적으로 오늘 배운 세 종류의 함수를 한번에 작성한 뒤 오버로드가 될 수 있도록 처리했습니다. 이렇게 처리를 하면 실제 업무에서 콤마를 찍어줄 때 타입별로 이름이 다른 함수를 호출하지 않고 동일한 함수를 호출하면서 인자값만 다르게 하여 상황에 따라 다른 결괏값을 추출할 수 있습니다.


실행 결과

실행 결과처럼 호출하는 함수명은 모두 동일하고 입력하는 값의 타입과 인자값이 다르지만 각각 원하는 결괏값이 나온 것 같습니다!


마무리

오늘은 자바의 천단위 콤마 찍는 방법을 정리해 봤는데요. 정말 간단하면서 활용도가 높은 기능인 것 같아요! 프로그래밍을 하면서 느낀 점은 프로그래밍은 뭔가 복잡한 로직이 많은 것보다 이런 단순한 기능의 집합이 모여서 큰 시스템이 만들어지는 것 같아요! 물론 복잡하고 어려운 로직이 들어간 프로그래밍도 많이 있습니다! ㅎㅎ 하지만 그런 복잡한 것들도 하나씩 까보면 이런 단순한 기능에서부터 시작이 되더라고요:)


그럼 오늘도 저의 작고 소중한 글을 읽어주셔서 감사합니다!

 


 

반응형