C#/디딤돌 C#

[C#] 3. Console 입출력 개요 - 3.1 서식 지정 문자열, 3.2 수식 포멧 문자열, 3.3 정수 및 실수의 자릿수 지정

언휴 2024. 1. 22. 17:10

3. Console 입출력 개요

 프로그래밍 언어를 배울 때 출력문은 제일 먼저 만나죠. 

 이 책에서도 첫 번째 프로그램인 "Hello, World"에서 Console.WriteLine("Hello, World!"); 를 사용했어요.

Console.WriteLine("Hello, World!");

 이번 장에서는 Console 클래스를 이용하여 출력하는 방법과 일력받는 부분에 관하여 알아볼게요.

3.1 서식 지정 문자열

 Console.WriteLine 메서드에 다양한 인자를 원하는 형태로 출력하려면 첫 번째 입력 인자로 서식 지정 문자열을 전달해야 합니다. 수나 날짜, 열거형 등을 원하는 형태로 출력할 때 효과적이죠.

 서식 지정 문자열은 인덱스, 배치, 포멧 문자열로 구성합니다.

{index [,alignment][:formatString]}
{인덱스[,배치][:포멧문자열]}

 인덱스는 서식 지정 문자열 뒤에 오는 데이터 중에 몇 번째 데이터를 출력할 것인지를 나타냅니다. 주의할 점은 0부터 시작한다는 점입니다.

Console.WriteLine("테스트1: {0}, {1}, {2}", "Hello", 23.7, 10);
Console.WriteLine("테스트2: {0}, {2}, {1}", "Hello", 23.7, 10);

▶ 실행 결과

테스트1: Hello, 23.7, 10
테스트2: Hello, 10, 23.7

 

 배치할 폭을 지정하는 것은 선택적입니다. 인덱스 표현 뒤에 콤마와 정수로 표현합니다. 양의 정수는 오른쪽 정렬 배치이며 음의 정수는 왼쪽 정렬 배치입니다.

Console.WriteLine("테스트3:{0,10}, {0,-10}끝", 1234);

▶ 실행 결과

테스트3:      1234, 1234      끝

 

 그리고 포멧 문자열도 선택적으로 표현할 수 있습니다. 포멧 문자열은 원하는 진수, 지수 표현, 정수 표현 등을 나타내는 약속입니다.

Console.WriteLine("테스트4: 0x{0:X}, {0:E}, {0:N}", 12345678);

▶ 실행 결과

테스트4: 0xBC614E, 1.234568E+007, 12,345,678.00

 다음은 현재까지 실습 코드입니다.

using System;
 
namespace _01_표준_서식_문자열
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("테스트1: {0}, {1}, {2}", "Hello", 23.7, 10);
            Console.WriteLine("테스트2: {0}, {2}, {1}", "Hello", 23.7, 10);
            Console.WriteLine("테스트3:{0,10}, {0,-10}끝", 1234);
            Console.WriteLine("테스트4: 0x{0:X}, {0:E}, {0:N}", 12345678);
        }
    }
}

3.2 수식 포멧 문자열(형식 지정자)

포멧 문자열 중에 숫자 형식을 지정하는 방법을 알아봅시다.

index [,alignment][:formatString]}
{인덱스[,배치][:포멧문자열]}

 포멧 문자열에서 어떠한 형식을 출력할 것이지 표현할 수 있어서 형식 지정자로도 부릅니다.

[표 3.1] 형식 지정자
[표 3.1] 형식 지정자

 형식 지정자를 살펴보기 위해 다음처럼 변수를 선언한 상태로 설명할게요.

int iv = 12345;
double dv = 12345.6789;
double dv2 = 0.23;

 

 알파벳 D10진수를 나타내는 형식 지정자입니다.

//D: 10 진수
Console.WriteLine("{0:D}", iv); 
Console.WriteLine(iv.ToString("D"));

▶ 실행 결과

12345
12345

 

 알파벳 E는 지수 표기를 나타내는 형식 지정자입니다. 예를 들어 123.41.234E+002처럼 나타냅니다. 여기서 E+002102승을 의미합니다.

//E: 지수
Console.WriteLine("{0:E}", dv);
Console.WriteLine(dv.ToString("E"));

▶ 실행 결과

1.234568E+004
1.234568E+004

 

 알파벳 F는 고정 소수점 표현을 나타내는 형식 지정자입니다.

//F: 고정 소수점
Console.WriteLine("{0:F}", dv);
Console.WriteLine(dv.ToString("F"));

▶ 실행 결과

12345.68
12345.68

 

 알파벳 G는 지수 표현 혹은 고정 소수점 표현 중에 간단한 형태로 표현하는 것으로 일반 표현이라고 부릅니다.

//G:일반
Console.WriteLine("{0:G}", dv); 
Console.WriteLine(dv.ToString("G")); 
Console.WriteLine("{0:G}", 0.0000023);

▶ 실행 결과

12345.6789
12345.6789
2.3E-06

 

 알파벳 N은 세 자리마다 콤마를 붙여서 수를 표현합니다.

//N:숫자
Console.WriteLine("{0:N}", 123456789);

▶ 실행 결과

123,456,789.00

 

 알파벳 P는 백분율 표현입니다.

//P: 백분율
Console.WriteLine("{0:P}", dv2); 
Console.WriteLine(dv2.ToString("P"));

▶ 실행 결과

23.00%
23.00%

 

 알파벳 X16진수 표현입니다. 16진수인 것을 알 수 있게 앞에 0x 혹은 0X를 같이 출력하면 더 좋겠죠.

//X: 16진수
Console.WriteLine("0x{0:X}", iv); 
Console.WriteLine("0x{0}", iv.ToString("X"));
Console.WriteLine("0x{0:X}", 255);

▶ 실행 결과

0x3039
0x3039
0xFF

 

 다음은 전체 소스 코드입니다.

using System;

namespace _02_형식_지정자
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int iv = 12345;
            double dv = 12345.6789;
            double dv2 = 0.23;
            //D: 10 진수
            Console.WriteLine("{0:D}", iv); 
            Console.WriteLine(iv.ToString("D"));
            //E: 지수
            Console.WriteLine("{0:E}", dv);
            Console.WriteLine(dv.ToString("E"));
            //F: 고정 소수점
            Console.WriteLine("{0:F}", dv);
            Console.WriteLine(dv.ToString("F"));
            //G:일반
            Console.WriteLine("{0:G}", dv); 
            Console.WriteLine(dv.ToString("G")); 
            Console.WriteLine("{0:G}", 0.0000023);
            //N:숫자
            Console.WriteLine("{0:N}", 123456789);
            //P: 백분율
            Console.WriteLine("{0:P}", dv2); 
            Console.WriteLine(dv2.ToString("P"));
            //X: 16진수
            Console.WriteLine("0x{0:X}", iv); 
            Console.WriteLine("0x{0}", iv.ToString("X"));
            Console.WriteLine("0x{0:X}", 255);
        }
    }
}

 

3.3 정수 및 실수의 자릿수 지정

 이번에는 형식 지정자를 이용하여 정수 및 실수의 자릿수를 지정하는 것을 알아봅시다.

[표 3.2] 자릿수 지정자
[표 3.2] 자릿수 지정자

 [3.2]는 자릿수를 지정하는 표현과 예를 간략하게 나타낸 것입니다. 

 설명하기 위해 다음의 변수를 선언한 상태에서 출발할게요.

double dv = 1234.123456789;
int iv = 123;

 

 포멧 문자열에 0의 개수는 정수 자릿수를 의미하며 빈 자리는 0을 출력합니다.

//0의 개수 = 정수 자릿수(빈 자리는 0 출력)            
Console.WriteLine("{0:000000}", iv);
Console.WriteLine("{0:000000}", dv);

▶ 실행 결과

000123
001234

 

 알파벳 D 뒤에 정수 표현도 정수 자릿수를 의미합니다. 이 때 전달하는 인자는 정수 형식이어야 합니다.

//"D정수" = 정수 자릿수(빈 자리는 0 출력)            
Console.WriteLine("{0:D6}", iv);
//Console.WriteLine("{0:D5}",dv); //오류

▶ 실행 결과

000123

 

 (.) 뒤에 0의 개수는 소수점 이하 자리를 의미합니다.

//"." 뒤에 0의 개수 = 소수점 이하 자릿수
Console.WriteLine("{0:.000000}", dv);

▶ 실행 결과

1234.123457

 

 형식 지정자 N 혹은 F 뒤에 오는 정수도 소수점 이하 자리를 의미합니다. 참고로 형식 지정자 N 혹은 F 뒤에 정수를 표현하지 않으면 소수점 2번째 자리까지 표현합니다.

//실수 값의 형식 지정자 뒤에 정수= 소수점 이하 자릿수
Console.WriteLine("{0:N}", dv);
Console.WriteLine("{0:N4}", dv);
Console.WriteLine("{0:F}", dv);
Console.WriteLine("{0:F5}", dv);

▶ 실행 결과

1,234.12
1,234.1235
1234.12
1234.12346

 

 다음은 실습에 사용한 전체 코드입니다.

using System;

namespace _03_자릿수_지정
{
    internal class Program
    {
        static void Main(string[] args)
        {
            double dv = 1234.123456789;
            int iv = 123;

            //0의 개수 = 정수 자릿수(빈 자리는 0 출력)            
            Console.WriteLine("{0:000000}", iv);
            Console.WriteLine("{0:000000}", dv);

            //"D정수" = 정수 자릿수(빈 자리는 0 출력)            
            Console.WriteLine("{0:D6}", iv);
            //Console.WriteLine("{0:D5}",dv); //오류

            //"." 뒤에 0의 개수 = 소수점 이하 자릿수
            Console.WriteLine("{0:.000000}", dv);

            //실수 값의 형식 지정자 뒤에 정수= 소수점 이하 자릿수
            Console.WriteLine("{0:N}", dv);
            Console.WriteLine("{0:N4}", dv);
            Console.WriteLine("{0:F}", dv);
            Console.WriteLine("{0:F5}", dv);
        }
    }
}