• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

출력(전반전-정수)

23.02.28 17:51 작성 조회수 254

-1

 정수 3자리마다 콤마가 찍히는 원리를 답변 받고 싶습니다 ㅠㅠ

답변 2

·

답변을 작성해보세요.

0

Kyungjae LEE님의 프로필

Kyungjae LEE

2023.12.02

안녕하세요 해당강의를 같이 수강하고있는 사람입니다.

자바의 System.out.printf()는 정수형 출력 "%d"의 "%"바로뒤에 ","를 사용할시 세자리수마다 ","를 찍어 출력하는 기본기능을 객체를 이용하여 제공하고있다고합니다. 내장기능이기 때문에 숙지하시고 가볍게 넘기셔도 괜찮을거같습니다.

printf 가 아닌 다른방식으로 쉼표 표기하거나 세번째자리가 아닌 다른방식으로 표기하고 싶으실경우 format메소드를 이용하여 표기합니다.

0

안녕하세요?
System.out.printf( 형식, 값 ); 는 원하는 형식으로 값을 출력하기 위해 사용합니다.
1) '%d' 는 정수 값을 위한 형식 지정자입니다. 예제에서는 1000000000 이라는 정수를 출력하기 위해 %d 를 사용했습니다.
2) % 와 d 사이에 들어가는 15 라는 값은 자릿수를 위해 사용합니다. 총 15자리 만큼의 공간을 확보하고 거기에 값을 넣으라는 의미입니다. 보통 출력값보다 자릿수를 여유롭게 설정합니다.
3) % 뒤에 들어가는 콤마(,) 는 천(1000) 단위로 구분 기호를 출력하는 역할을 합니다.
4) '%n' 은 줄바꿈을 위해 사용합니다. System.out.println( ) 의 경우 맨 뒤에 붙은 ln 이 line 을 뜻하며 자동으로 줄바꿈을 하는데 System.out.printf( ) 에서는 %n 을 넣지 않으면 줄바꿈을 하지 않습니다.

정수 3자리마다 콤마가 찍히는 원리는 실제로는 구현되어 있는 코드가 복잡하게 되어 있어 모든 내용을 설명드리기는 어렵고 쉽게 아래와 같은 방식으로 진행된다고 이해하시면 도움될 것 같아요.

public class SampleClass {
    public static void main(String[] args) {
        String result = separateNumberWithComma(1000000000);
        System.out.println(result);
    }

    public static String separateNumberWithComma(int number) {
        String str = Integer.toString(number);
        StringBuilder sb = new StringBuilder(str);

        int index = sb.length() - 3;
        while (index > 0) {
            sb.insert(index, ",");
            index -= 3;
            System.out.println(sb.toString()); // 과정 출력
        }
        return sb.toString();
    }
}

먼저 실행 결과는 이렇습니다.

1000000,000 // 뒤에서 3자리 앞에 콤마 삽입
1000,000,000 // 그로부터 3자리 앞에 콤마 삽입
1,000,000,000 // 그로부터 3자리 앞에 콤마 삽입
// 아래는 최종 결과
1,000,000,000

separateNumberWithComma() 메소드에서는 콤마를 적용하려는 정수를 전달받은 뒤 문자열로 변환을 합니다. 그리고 문자열의 길이를 파악하여 문자열의 맨 뒤에서 3자리 앞에 콤마를 삽입(sb.insert) 합니다. 그리고 3자리 앞으로 이동 (index -= 3) 하여 또 콤마를 삽입합니다. 이 작업을 반복수행하고 나면 결과적으로 3자리마다 콤마가 적용된 문자열이 되는 것이죠.

궁금증 해결에 도움되시길 바라겠습니다 😊
감사합니다.