다음을 통해 공유


표준 숫자 형식 문자열

표준 숫자 형식 문자열은 일반적인 숫자 형식의 서식을 지정하는 데 사용됩니다. 표준 숫자 형식 문자열은 다음과 같은 형식 [format specifier][precision specifier]을 사용합니다.

  • 형식 지정자는 숫자 형식의 형식(예: 통화 또는 백분율)을 지정하는 단일 알파벳 문자입니다. 공백을 포함하여 둘 이상의 알파벳 문자를 포함하는 숫자 서식 문자열은 사용자 지정 숫자 서식 문자열로 해석됩니다. 자세한 내용은 사용자 지정 숫자 형식 문자열을 참조하세요.

  • 전체 자릿수 지정자는 결과 문자열의 숫자 수에 영향을 주는 선택적 정수입니다. .NET 7 이상 버전에서 최대 정밀도 값은 999,999,999입니다. .NET 6에서 최대 전체 자릿수 값은 Int32.MaxValue. 이전 .NET 버전에서 전체 자릿수는 0에서 99까지입니다. 전체 자릿수 지정자는 숫자의 문자열 표현에서 숫자 수를 제어합니다. 숫자 자체를 반올림하지 않습니다. 반올림 작업을 수행하려면 , Math.Ceiling또는 Math.Floor 메서드를 Math.Round사용합니다.

    전체 자릿수 지정자가 결과 문자열의 소수 자릿수를 제어하는 경우 결과 문자열은 무한정 정확한 결과에 가장 가까운 표시 가능한 결과로 반올림되는 숫자를 반영합니다. 두 개의 동일하게 나타낼 수 있는 결과가 있는 경우:

    • .NET Framework 및 .NET Core에서 .NET Core 2.0까지 런타임은 유효 자릿수가 가장 낮은 결과(즉, 사용 MidpointRounding.AwayFromZero)를 선택합니다.
    • .NET Core 2.1 이상에서 런타임은 유효 자릿수가 가장 낮은 결과(즉, 사용 MidpointRounding.ToEven)를 선택합니다.

    메모

    전체 자릿수 지정자는 결과 문자열의 자릿수를 결정합니다. 선행 또는 후행 공백으로 결과 문자열을 패딩하려면 복합 서식 지정 기능을 사용하고 서식 항목에서 너비 구성 요소를 정의합니다.

표준 숫자 형식 문자열은 다음에서 지원됩니다.

팁 (조언)

숫자 또는 날짜 및 시간 값에 서식 문자열을 적용하고 결과 문자열을 표시할 수 있는 .NET Core Windows Forms 애플리케이션인 서식 유틸리티를 다운로드할 수 있습니다. 소스 코드는 C#Visual Basic에 사용할 수 있습니다.

표준 형식 지정자

다음 표에서는 표준 숫자 형식 지정자에 대해 설명하고 각 형식 지정자가 생성한 샘플 출력을 표시합니다. 표준 숫자 형식 문자열을 사용하는 방법에 대한 자세한 내용은 Notes 섹션을 참조하고, 코드 예제 섹션을 참조하세요.

특정 문화권에 대한 형식이 지정된 문자열의 결과는 다음 예제와 다를 수 있습니다. 운영 체제 설정, 사용자 설정, 환경 변수 및 사용 중인 .NET 버전은 모두 형식에 영향을 줄 수 있습니다. 예를 들어 .NET 5부터 .NET은 여러 플랫폼에서 문화 형식을 통합하려고 합니다. 자세한 내용은 .NET 세계화 및 ICU를 참조하세요.

서식 지정자 이름 설명 예시
"B" 또는 "b" 바이너리 결과: 이진 문자열입니다.

지원: 정수 형식만(.NET 8 이상).

전체 자릿수 지정자: 결과 문자열의 숫자 수입니다.

추가 정보: 이진("B") 형식 지정자입니다.
42 ("나")
-> 101010

255 ("B16")
-> 0000000011111111
"C" 또는 "c" 통화 결과: 통화 값입니다.

지원: 모든 숫자 형식.

전체 자릿수 지정자: 소수 자릿수입니다.

기본 전체 자릿수 지정자: 에 의해 NumberFormatInfo.CurrencyDecimalDigits정의됩니다.

추가 정보: 통화("C") 형식 지정자입니다.
123.456("C", en-US)
-> $123.46엔

123.456("C", fr-FR)
-> 123,46 유로

123.456 ("씨", ja-JP)
-> 123엔

-123.456("C3", en-US)
-> ($123.456엔)

-123.456("C3", fr-FR)
-> -123,456 유로

-123.456("C3", ja-JP)
-> -123.456
"D" 또는 "d" 십진수 결과: 선택적 음수 기호가 있는 정수 숫자입니다.

지원: 정수 계열 형식에만 해당합니다.

전체 자릿수 지정자: 최소 자릿수입니다.

기본 전체 자릿수 지정자: 필요한 최소 자릿수입니다.

추가 정보: Decimal("D") 형식 지정자입니다.
1234("D")
-> 1234년

-1234("D6")
-> -001234
"E" 또는 "e" 지수(과학) 결과: 지수 표기법입니다.

지원: 모든 숫자 형식.

전체 자릿수 지정자: 소수 자릿수입니다.

기본 전체 자릿수 지정자: 6.

추가 정보: 지수("E") 형식 지정자입니다.
1052.0329112756 ("E", en-US)
-> 1.052033E+003

1052.0329112756("e", fr-FR)
-> 1,052033E+003

-1052.0329112756("e2", en-US)
-> -1.05E+003

-1052.0329112756("E2", fr-FR)
-> -1,05E+003
"F" 또는 "f" 고정 소수점 결과: 선택적 음수 기호가 있는 정수 및 소수 자릿수입니다.

지원: 모든 숫자 형식.

전체 자릿수 지정자: 소수 자릿수입니다.

기본 전체 자릿수 지정자: 에 의해 NumberFormatInfo.NumberDecimalDigits정의됩니다.

추가 정보: Fixed-Point("F") 형식 지정자입니다.
1234.567 ("에프", en-US)
-> 1234.57 년

1234.567("F", de-DE)
-> 1234,57

1234("F1", en-US)
-> 1234.0

1234("F1", de-DE)
-> 1234,0

-1234.56("F4", en-US)
-> -1234.5600

-1234.56("F4", de-DE)
-> -1234,5600
"G" 또는 "g" 일반 결과: 고정 소수점 또는 과학적 표기법이 더 압축됩니다.

지원: 모든 숫자 형식.

전체 자릿수 지정자: 유효 자릿수입니다.

기본 전체 자릿수 지정자: 숫자 형식에 따라 다릅니다.

추가 정보: 일반("G") 형식 지정자입니다.
-123.456("G", en-US)
-> -123.456

-123.456("G", sv-SE)
-> -123,456

123.4546("G4", en-US)
-> 123.5

123.4546("G4", sv-SE)
-> 123,5

-1.234567890e-25("G", en-US)
-> -1.23456789E-25

-1.234567890e-25("G", sv-SE)
-> -1,23456789E-25
"N" 또는 "n" 숫자 결과: 정수 및 10진수 숫자, 그룹 구분 기호 및 선택적 음수 기호가 있는 소수 구분 기호입니다.

지원: 모든 숫자 형식.

전체 자릿수 지정자: 원하는 소수 자릿수입니다.

기본 전체 자릿수 지정자: 에 의해 NumberFormatInfo.NumberDecimalDigits정의됩니다.

추가 정보: 숫자("N") 형식 지정자입니다.
1234.567 ("N", en-US)
-> 1,234.57

1234.567("N", ru-RU)
-> 1 234,57

1234년 ("N1", en-US)
-> 1,234.0

1234("N1", ru-RU)
-> 1 234,0

-1234.56("N3", en-US)
-> -1,234.560

-1234.56("N3", ru-RU)
-> -1 234,560
"P" 또는 "p" 퍼센트 결과: 숫자를 100으로 곱하고 백분율 기호와 함께 표시합니다.

지원: 모든 숫자 형식.

전체 자릿수 지정자: 원하는 소수 자릿수입니다.

기본 전체 자릿수 지정자: 에 의해 NumberFormatInfo.PercentDecimalDigits정의됩니다.

추가 정보: 백분율("P") 형식 지정자입니다.
1("P", en-US)
-> 100.00 %

1("P", fr-FR)
-> 100,000 %

-0.39678("P1", en-US)
-> -39.7%

-0.39678("P1", fr-FR)
-> -39,7%
"R" 또는 "r" 왕복 결과: 동일한 숫자로 왕복할 수 있는 문자열입니다.

지원되는 형식: Single, DoubleBigInteger

참고: 형식에 BigInteger 만 권장합니다. 형식의 경우 Double "G17"을 사용하고 형식에는 Single "G9"를 사용합니다.
전체 자릿수 지정자: 무시됩니다.

추가 정보: 왕복("R") 형식 지정자입니다.
123456789.12345678("R")
-> 123456789.12345678

-1234567890.12345678("R")
-> -1234567890.1234567
"X" 또는 "x" 16 진수 결과: 16진수 문자열입니다.

지원: 정수 계열 형식에만 해당합니다.

전체 자릿수 지정자: 결과 문자열의 숫자 수입니다.

추가 정보: 16진수("X") 형식 지정자입니다.
255("X")
-> FF (FF)

-1("x")
-> FF

255("x4")
-> 00FF

-1("X4")
-> 00FF
다른 모든 단일 문자 알 수 없는 지정자 결과: 런타임에 throw FormatException 합니다.

표준 숫자 형식 문자열 사용

메모

이 문서의 C# 예제는 Try.NET 인라인 코드 실행기 및 플레이그라운드에서 실행됩니다. 실행 단추를 선택하여 대화형 창에서 예제를 실행합니다. 코드를 실행하면 코드를 수정하고 실행을 다시 선택하여 수정된 코드를 실행할 수 있습니다. 수정된 코드는 대화형 창에서 실행되거나 컴파일에 실패하면 대화형 창에 모든 C# 컴파일러 오류 메시지가 표시됩니다.

표준 숫자 서식 문자열을 사용하여 다음 방법 중 하나로 숫자 값의 서식을 정의할 수 있습니다.

  • 매개 변수가 있는 메서드 또는 메서드 TryFormat 의 오버로드에 ToString 전달할 format 수 있습니다. 다음 예제에서는 현재 문화권에서 숫자 값의 형식을 통화 문자열로 지정합니다(이 경우 en-US 문화권).

    decimal value = 123.456m;
    Console.WriteLine(value.ToString("C2"));
    // Displays $123.46
    
    Dim value As Decimal = 123.456d
    Console.WriteLine(value.ToString("C2"))
    ' Displays $123.46
    
  • 메서드와 같은 메서드와 함께 사용되는 형식 항목에서 인수로 formatStringString.FormatConsole.WriteLine제공될 수 있습니다.StringBuilder.AppendFormat 자세한 내용은 복합 서식을 참조하세요. 다음 예제에서는 형식 항목을 사용하여 문자열에 통화 값을 삽입합니다.

    decimal value = 123.456m;
    Console.WriteLine($"Your account balance is {value:C2}.");
    // Displays "Your account balance is $123.46."
    
    Dim value As Decimal = 123.456d
    Console.WriteLine("Your account balance is {0:C2}.", value)
    ' Displays "Your account balance is $123.46."
    

    필요에 따라 인수를 alignment 제공하여 숫자 필드의 너비와 해당 값이 오른쪽 또는 왼쪽 맞춤인지 여부를 지정할 수 있습니다. 다음 예제에서는 28자 필드에 통화 값을 왼쪽 맞춤하고 14자 필드에 통화 값을 오른쪽 맞춤합니다.

    decimal[] amounts = { 16305.32m, 18794.16m };
    Console.WriteLine("   Beginning Balance           Ending Balance");
    Console.WriteLine("   {0,-28:C2}{1,14:C2}", amounts[0], amounts[1]);
    // Displays:
    //        Beginning Balance           Ending Balance
    //        $16,305.32                      $18,794.16
    
    Dim amounts() As Decimal = {16305.32d, 18794.16d}
    Console.WriteLine("   Beginning Balance           Ending Balance")
    Console.WriteLine("   {0,-28:C2}{1,14:C2}", amounts(0), amounts(1))
    ' Displays:
    '        Beginning Balance           Ending Balance
    '        $16,305.32                      $18,794.16      
    
  • 보간된 문자열의 formatString 보간된 식 항목에서 인수로 제공할 수 있습니다. 자세한 내용은 C# 참조의 문자열 보간 문서 또는 Visual Basic 참조의 보간된 문자열 문서를 참조하세요.

다음 섹션에서는 각 표준 숫자 형식 문자열에 대한 자세한 정보를 제공합니다.

이진 형식 지정자(B)

이진("B") 형식 지정자는 숫자를 이진 숫자 문자열로 변환합니다. 이 형식은 정수 계열 형식에 대해서만 지원되며 .NET 8 이상에서만 지원됩니다.

전체 자릿수 지정자는 결과 문자열에서 원하는 최소 자릿수를 나타냅니다. 필요한 경우 전체 자릿수 지정자가 지정한 자릿수를 생성하기 위해 숫자가 왼쪽에 0으로 채워집니다.

결과 문자열은 현재 NumberFormatInfo 개체의 서식 지정 정보의 영향을 받지 않습니다.

통화 형식 지정자(C)

"C"(또는 통화) 형식 지정자는 숫자를 통화 금액을 나타내는 문자열로 변환합니다. 전체 자릿수 지정자는 결과 문자열에서 원하는 소수 자릿수를 나타냅니다. 전체 자릿수 지정자를 생략하면 기본 전체 자릿수가 속성에 NumberFormatInfo.CurrencyDecimalDigits 의해 정의됩니다.

서식을 지정할 값이 지정하거나 기본값인 소수 자릿수보다 많은 경우 소수 자릿수 값은 결과 문자열에서 반올림됩니다. 지정한 소수 자릿수의 오른쪽에 있는 값이 5 이상이면 결과 문자열의 마지막 숫자가 0에서 둥글게 반올림됩니다.

결과 문자열은 현재 NumberFormatInfo 개체의 서식 지정 정보의 영향을 받습니다. 다음 표에서는 반환된 NumberFormatInfo 문자열의 서식을 제어하는 속성을 나열합니다.

NumberFormatInfo 속성 설명
CurrencyPositivePattern 양수 값에 대한 통화 기호의 배치를 정의합니다.
CurrencyNegativePattern 음수 값에 대한 통화 기호의 배치를 정의하고 음수 기호가 괄호 또는 NegativeSign 속성으로 표시되는지 여부를 지정합니다.
NegativeSign 괄호가 사용되지 않음을 나타내는 경우 CurrencyNegativePattern 사용되는 음수 기호를 정의합니다.
CurrencySymbol 통화 기호를 정의합니다.
CurrencyDecimalDigits 통화 값의 기본 소수 자릿수를 정의합니다. 전체 자릿수 지정자를 사용하여 이 값을 재정의할 수 있습니다.
CurrencyDecimalSeparator 정수 자릿수와 소수 자릿수를 구분하는 문자열을 정의합니다.
CurrencyGroupSeparator 정수 그룹을 구분하는 문자열을 정의합니다.
CurrencyGroupSizes 그룹에 표시되는 정수 자릿수를 정의합니다.

다음 예제에서는 통화 형식 지정자를 사용하여 Double 값의 서식을 지정합니다.

double value = 12345.6789;
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture));

Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture));

Console.WriteLine(value.ToString("C3",
                  CultureInfo.CreateSpecificCulture("da-DK")));
// The example displays the following output on a system whose
// current culture is English (United States):
//       $12,345.68
//       $12,345.679
//       12.345,679 kr
Dim value As Double = 12345.6789
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture))

Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture))

Console.WriteLine(value.ToString("C3", _
                  CultureInfo.CreateSpecificCulture("da-DK")))
' The example displays the following output on a system whose
' current culture is English (United States):
'       $12,345.68
'       $12,345.679
'       kr 12.345,679

10진수 형식 지정자(D)

"D"(또는 10진수) 형식 지정자는 숫자를 10진수 문자열(0-9)로 변환하고, 숫자가 음수이면 빼기 기호로 접두사를 지정합니다. 이 형식은 정수 형식에 대해서만 지원됩니다.

전체 자릿수 지정자는 결과 문자열에서 원하는 최소 자릿수를 나타냅니다. 필요한 경우 전체 자릿수 지정자가 지정한 자릿수를 생성하기 위해 숫자가 왼쪽에 0으로 채워집니다. 전체 자릿수 지정자가 지정되지 않은 경우 기본값은 선행 0이 없는 정수에 필요한 최소값입니다.

결과 문자열은 현재 NumberFormatInfo 개체의 서식 지정 정보의 영향을 받습니다. 다음 표와 같이 단일 속성은 결과 문자열의 서식에 영향을 줍니다.

NumberFormatInfo 속성 설명
NegativeSign 숫자가 음수임을 나타내는 문자열을 정의합니다.

다음은 10진수 서식 지정자를 사용하여 Int32 값의 서식을 지정하는 예제입니다.

int value;

value = 12345;
Console.WriteLine(value.ToString("D"));
// Displays 12345
Console.WriteLine(value.ToString("D8"));
// Displays 00012345

value = -12345;
Console.WriteLine(value.ToString("D"));
// Displays -12345
Console.WriteLine(value.ToString("D8"));
// Displays -00012345
Dim value As Integer

value = 12345
Console.WriteLine(value.ToString("D"))
' Displays 12345   
Console.WriteLine(value.ToString("D8"))
' Displays 00012345

value = -12345
Console.WriteLine(value.ToString("D"))
' Displays -12345
Console.WriteLine(value.ToString("D8"))
' Displays -00012345

지수 형식 지정자(E)

지수("E") 형식 지정자는 숫자를 "-d.ddd... E+ddd" 또는 "-d.ddd... e+ddd"입니다. 여기서 각 "d"는 숫자(0-9)를 나타냅니다. 숫자가 음수이면 문자열이 빼기 기호로 시작합니다. 정확히 한 자리는 항상 소수점 앞에 섰습니다.

전체 자릿수 지정자는 소수점 뒤의 원하는 자릿수를 나타냅니다. 전체 자릿수 지정자를 생략하면 소수점 이후의 기본값인 6자리가 사용됩니다.

형식 지정자의 대/소문자는 지수 접두사를 "E" 또는 "e"로 접두사로 지정할지 여부를 나타냅니다. 지수는 항상 더하기 또는 빼기 기호와 최소 3자리 숫자로 구성됩니다. 지수는 필요한 경우 이 최소값을 충족하기 위해 0으로 채워집니다.

결과 문자열은 현재 NumberFormatInfo 개체의 서식 지정 정보의 영향을 받습니다. 다음 표에서는 반환된 NumberFormatInfo 문자열의 서식을 제어하는 속성을 나열합니다.

NumberFormatInfo 속성 설명
NegativeSign 계수와 지수 모두에 대해 숫자가 음수임을 나타내는 문자열을 정의합니다.
NumberDecimalSeparator 계수의 정수와 소수 자릿수를 구분하는 문자열을 정의합니다.
PositiveSign 지수가 양수임을 나타내는 문자열을 정의합니다.

다음 예제에서는 지수 형식 지정자를 사용하여 Double 값의 서식을 지정합니다.

double value = 12345.6789;
Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture));
// Displays 1.234568E+004

Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture));
// Displays 1.2345678900E+004

Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture));
// Displays 1.2346e+004

Console.WriteLine(value.ToString("E",
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 1,234568E+004
Dim value As Double = 12345.6789
Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture))
' Displays 1.234568E+004

Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture))
' Displays 1.2345678900E+004

Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture))
' Displays 1.2346e+004

Console.WriteLine(value.ToString("E", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 1,234568E+004

고정 소수점 형식 지정자(F)

고정 소수점("F") 형식 지정자는 숫자를 "-ddd.ddd..." 형식의 문자열로 변환합니다. 여기서 각 "d"는 숫자(0-9)를 나타냅니다. 숫자가 음수이면 문자열이 빼기 기호로 시작합니다.

정밀도 지정자는 원하는 소수 자릿수를 나타냅니다. 전체 자릿수 지정자를 생략하면 현재 NumberFormatInfo.NumberDecimalDigits 속성은 숫자 정밀도를 제공합니다.

결과 문자열은 현재 NumberFormatInfo 개체의 서식 지정 정보의 영향을 받습니다. 다음 표에서는 결과 문자열의 서식을 NumberFormatInfo 제어하는 개체의 속성을 나열합니다.

NumberFormatInfo 속성 설명
NegativeSign 숫자가 음수임을 나타내는 문자열을 정의합니다.
NumberDecimalSeparator 정수 자릿수와 소수 자릿수를 구분하는 문자열을 정의합니다.
NumberDecimalDigits 기본 소수 자릿수를 정의합니다. 전체 자릿수 지정자를 사용하여 이 값을 재정의할 수 있습니다.

다음 예제에서는 고정 소수점 형식 지정자를 사용하여 Double a Int32 및 값의 서식을 지정합니다.

int integerNumber;
integerNumber = 17843;
Console.WriteLine(integerNumber.ToString("F",
                  CultureInfo.InvariantCulture));
// Displays 17843.00

integerNumber = -29541;
Console.WriteLine(integerNumber.ToString("F3",
                  CultureInfo.InvariantCulture));
// Displays -29541.000

double doubleNumber;
doubleNumber = 18934.1879;
Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture));
// Displays 18934.19

Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture));
// Displays 18934

doubleNumber = -1898300.1987;
Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture));
// Displays -1898300.2

Console.WriteLine(doubleNumber.ToString("F3",
                  CultureInfo.CreateSpecificCulture("es-ES")));
// Displays -1898300,199
Dim integerNumber As Integer
integerNumber = 17843
Console.WriteLine(integerNumber.ToString("F", CultureInfo.InvariantCulture))
' Displays 17843.00

integerNumber = -29541
Console.WriteLine(integerNumber.ToString("F3", CultureInfo.InvariantCulture))
' Displays -29541.000

Dim doubleNumber As Double
doubleNumber = 18934.1879
Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture))
' Displays 18934.19

Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture))
' Displays 18934

doubleNumber = -1898300.1987
Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture))
' Displays -1898300.2

Console.WriteLine(doubleNumber.ToString("F3", _
                  CultureInfo.CreateSpecificCulture("es-ES")))
' Displays -1898300,199                        

일반 형식 지정자(G)

일반("G") 형식 지정자는 숫자의 형식과 정밀도 지정자가 있는지 여부에 따라 숫자를 고정 소수점 또는 과학적 표기법의 압축으로 변환합니다. 전체 자릿수 지정자는 결과 문자열에 나타날 수 있는 최대 유효 자릿수를 정의합니다. 전체 자릿수 지정자를 생략하거나 0이면 다음 표에 표시된 대로 숫자의 형식에 따라 기본 전체 자릿수가 결정됩니다.

숫자 형식 기본 전체 자릿수
Byte 또는 SByte 3자리 숫자
Int16 또는 UInt16 5자리 숫자
Int32 또는 UInt32 10자리 숫자
Int64 19자리 숫자
UInt64 20자리 숫자
BigInteger 무제한( "R"과 동일)
Half 숫자를 나타내는 가장 작은 라운드트립 가능 자릿수
Single 숫자를 나타내는 가장 작은 라운드트립 가능 자릿수입니다(.NET Framework에서는 G7이 기본값임).
Double 숫자를 나타내는 가장 작은 라운드트립 가능 자릿수입니다(.NET Framework에서는 G15가 기본값임).
Decimal 숫자를 나타내는 가장 작은 라운드트립 가능 자릿수

고정 소수점 표기법은 과학적 표기법으로 숫자를 표현한 결과 지수가 -5 보다 크고 정밀도 지정자보다 작으면 사용됩니다. 그렇지 않으면 과학적 표기법이 사용됩니다. 필요한 경우 결과에는 소수점이 포함되고 소수점 뒤의 후행 0은 생략됩니다. 전체 자릿수 지정자가 있고 결과의 유효 자릿수가 지정된 전체 자릿수를 초과하면 반올림을 통해 초과 후행 자릿수가 제거됩니다.

그러나 숫자가 a Decimal 이고 전체 자릿수 지정자를 생략하면 고정 소수점 표기법이 항상 사용되며 후행 0이 유지됩니다.

과학적 표기법을 사용하는 경우 형식 지정자가 "G"이면 결과의 지수 앞에 "E", 형식 지정자가 "g"인 경우 "e"가 접두사로 지정됩니다. 지수에는 최소 두 자리 숫자가 포함됩니다. 지수에 최소 3자리 숫자를 포함하는 지수 형식 지정자에 의해 생성되는 과학적 표기법의 형식과 다릅니다.

값과 함께 Double 사용할 경우 "G17" 형식 지정자는 원래 Double 값이 성공적으로 왕복되도록 합니다. Double 이는 IEEE 754-2008 규격 배정밀도(binary64) 부동 소수점 숫자로 최대 17자리의 정밀도를 제공하기 때문입니다. .NET Framework에서는 "R" 형식 지정자 대신 사용하는 것이 좋습니다. 경우에 따라 "R"이 왕복 배정밀도 부동 소수점 값을 성공적으로 라운드트립하지 못하기 때문에 사용하는 것이 좋습니다.

값과 함께 Single 사용할 경우 "G9" 형식 지정자는 원래 Single 값이 성공적으로 왕복되도록 합니다. 이는 Single IEEE 754-2008 규격 단정밀도(binary32) 부동 소수점 숫자로 최대 9자리의 정밀도를 제공하기 때문입니다. 성능상의 이유로 "R" 형식 지정자 대신 사용하는 것이 좋습니다.

결과 문자열은 현재 NumberFormatInfo 개체의 서식 지정 정보의 영향을 받습니다. 다음 표에서는 결과 문자열의 서식을 제어하는 속성을 나열 NumberFormatInfo 합니다.

NumberFormatInfo 속성 설명
NegativeSign 숫자가 음수임을 나타내는 문자열을 정의합니다.
NumberDecimalSeparator 정수 자릿수와 소수 자릿수를 구분하는 문자열을 정의합니다.
PositiveSign 지수가 양수임을 나타내는 문자열을 정의합니다.

다음 예제에서는 일반 형식 지정자를 사용하여 다양한 부동 소수점 값의 서식을 지정합니다.

double number;

number = 12345.6789;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays  12345.6789
Console.WriteLine(number.ToString("G",
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 12345,6789

Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture));
// Displays 12345.68

number = .0000023;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 2.3E-06
Console.WriteLine(number.ToString("G",
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 2,3E-06

number = .0023;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 0.0023

number = 1234;
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture));
// Displays 1.2E+03

number = Math.PI;
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture));
// Displays 3.1416
Dim number As Double

number = 12345.6789
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays  12345.6789
Console.WriteLine(number.ToString("G", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 12345,6789

Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture))
' Displays 12345.68 

number = .0000023
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 2.3E-06       
Console.WriteLine(number.ToString("G", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 2,3E-06

number = .0023
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 0.0023

number = 1234
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture))
' Displays 1.2E+03

number = Math.Pi
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture))
' Displays 3.1416    

숫자 형식 지정자(N)

숫자("N") 형식 지정자는 숫자를 "-d,ddd,ddd.ddd..."형식의 문자열로 변환합니다. 여기서 "-"는 필요한 경우 음수 기호를 나타내고, "d"는 숫자(0-9)를 나타내고, ""는 그룹 구분 기호를 나타내고, "."는 소수점 기호를 나타냅니다. 전체 자릿수 지정자는 소수점 뒤의 원하는 자릿수를 나타냅니다. 전체 자릿수 지정자를 생략하면 소수 자릿수가 현재 NumberFormatInfo.NumberDecimalDigits 속성에 의해 정의됩니다.

결과 문자열은 현재 NumberFormatInfo 개체의 서식 지정 정보의 영향을 받습니다. 다음 표에서는 결과 문자열의 서식을 제어하는 속성을 나열 NumberFormatInfo 합니다.

NumberFormatInfo 속성 설명
NegativeSign 숫자가 음수임을 나타내는 문자열을 정의합니다.
NumberNegativePattern 음수 값의 형식을 정의하고 음수 기호가 괄호로 표시되는지 또는 NegativeSign 속성으로 표시되는지 여부를 지정합니다.
NumberGroupSizes 그룹 구분 기호 사이에 나타나는 정수 자릿수를 정의합니다.
NumberGroupSeparator 정수 그룹을 구분하는 문자열을 정의합니다.
NumberDecimalSeparator 정수 자릿수와 소수 자릿수를 구분하는 문자열을 정의합니다.
NumberDecimalDigits 기본 소수 자릿수를 정의합니다. 정밀도 지정자를 사용하여 이 값을 재정의할 수 있습니다.

다음 예제에서는 숫자 서식 지정자를 사용하여 다양한 부동 소수점 값의 서식을 지정합니다.

double dblValue = -12445.6789;
Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture));
// Displays -12,445.68
Console.WriteLine(dblValue.ToString("N1",
                  CultureInfo.CreateSpecificCulture("sv-SE")));
// Displays -12 445,7

int intValue = 123456789;
Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture));
// Displays 123,456,789.0
Dim dblValue As Double = -12445.6789
Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture))
' Displays -12,445.68
Console.WriteLine(dblValue.ToString("N1", _
                  CultureInfo.CreateSpecificCulture("sv-SE")))
' Displays -12 445,7

Dim intValue As Integer = 123456789
Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture))
' Displays 123,456,789.0 

백분율 형식 지정자(P)

백분율("P") 형식 지정자는 숫자를 100으로 곱하고 백분율을 나타내는 문자열로 변환합니다. 정밀도 지정자는 원하는 소수 자릿수를 나타냅니다. 전체 자릿수 지정자를 생략하면 현재 PercentDecimalDigits 속성에서 제공하는 기본 숫자 전체 자릿수가 사용됩니다.

다음 표에서는 반환된 NumberFormatInfo 문자열의 서식을 제어하는 속성을 나열합니다.

NumberFormatInfo 속성 설명
PercentPositivePattern 양수 값에 대한 백분율 기호의 배치를 정의합니다.
PercentNegativePattern 음수 값에 대한 백분율 기호 및 음수 기호의 배치를 정의합니다.
NegativeSign 숫자가 음수임을 나타내는 문자열을 정의합니다.
PercentSymbol 백분율 기호를 정의합니다.
PercentDecimalDigits 백분율 값의 기본 소수 자릿수를 정의합니다. 전체 자릿수 지정자를 사용하여 이 값을 재정의할 수 있습니다.
PercentDecimalSeparator 정수 자릿수와 소수 자릿수를 구분하는 문자열을 정의합니다.
PercentGroupSeparator 정수 그룹을 구분하는 문자열을 정의합니다.
PercentGroupSizes 그룹에 표시되는 정수 자릿수를 정의합니다.

다음 예제에서는 백분율 서식 지정자를 사용하여 부동 소수점 값의 서식을 지정합니다.

double number = .2468013;
Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture));
// Displays 24.68 %
Console.WriteLine(number.ToString("P",
                  CultureInfo.CreateSpecificCulture("hr-HR")));
// Displays 24,68%
Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture));
// Displays 24.7 %
Dim number As Double = .2468013
Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture))
' Displays 24.68 %
Console.WriteLine(number.ToString("P", _
                  CultureInfo.CreateSpecificCulture("hr-HR")))
' Displays 24,68%     
Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture))
' Displays 24.7 %

왕복 형식 지정자(R)

라운드트립("R") 형식 지정자는 문자열로 변환된 숫자 값이 동일한 숫자 값으로 다시 구문 분석되도록 합니다. 이 형식은 , Half, SingleDouble 형식에 BigInteger대해서만 지원됩니다.

.NET Framework 및 3.0 이전의 .NET Core 버전에서 "R" 형식 지정자가 경우에 따라 왕복 값을 성공적으로 반환 Double 하지 못합니다. 값과 Double 값 모두 Single 에 대해 "R" 형식 지정자는 상대적으로 성능이 저하됩니다. 대신 값에 "G17" 형식 지정자와 Double"G9" 형식 지정자를 사용하여 왕복 Single 값을 성공적으로 수행하는 것이 좋습니다.

이 지정자를 BigInteger 사용하여 값의 서식을 지정하면 해당 문자열 표현에는 값의 모든 유효 자릿수가 BigInteger 포함됩니다.

전체 자릿수 지정자를 포함할 수 있지만 무시됩니다. 이 지정자를 사용하는 경우 왕복이 정밀도보다 우선적으로 적용됩니다. 결과 문자열은 현재 NumberFormatInfo 개체의 서식 지정 정보의 영향을 받습니다. 다음 표에서는 결과 문자열의 서식을 제어하는 속성을 나열 NumberFormatInfo 합니다.

NumberFormatInfo 속성 설명
NegativeSign 숫자가 음수임을 나타내는 문자열을 정의합니다.
NumberDecimalSeparator 정수 자릿수와 소수 자릿수를 구분하는 문자열을 정의합니다.
PositiveSign 지수가 양수임을 나타내는 문자열을 정의합니다.

다음은 라운드트립 형식 지정자를 사용하여 BigInteger 값의 서식을 지정하는 예제입니다.

using System;
using System.Numerics;

public class Example
{
   public static void Main()
   {
      var value = BigInteger.Pow(Int64.MaxValue, 2);
      Console.WriteLine(value.ToString("R"));
   }
}
// The example displays the following output:
//      85070591730234615847396907784232501249
Imports System.Numerics

Module Example
    Public Sub Main()
        Dim value = BigInteger.Pow(Int64.MaxValue, 2)
        Console.WriteLine(value.ToString("R"))
    End Sub
End Module
' The example displays the following output:
'      85070591730234615847396907784232501249  

중요합니다

경우에 따라 Double "R" 표준 숫자 형식 문자열로 서식이 지정된 값은 64비트 시스템에서 또는 스위치를 사용하여 /platform:x64/platform:anycpu 컴파일되고 실행되는 경우 왕복에 성공하지 않습니다. 자세한 내용은 다음 단락을 참조하세요.

"R" 표준 숫자 형식 문자열로 서식이 지정된 값이 Double 라운드트립되지 않는 문제를 해결하려면 스위치를 /platform:x64 사용하여 /platform:anycpu 컴파일하고 64비트 시스템에서 실행하는 경우 "G17" 표준 숫자 형식 문자열을 사용하여 값의 서식을 지정할 Double 수 있습니다. 다음 예제에서는 왕복에 성공하지 않는 값과 함께 Double "R" 형식 문자열을 사용하고 "G17" 형식 문자열을 사용하여 원래 값을 성공적으로 왕복합니다.

Console.WriteLine("Attempting to round-trip a Double with 'R':");
double initialValue = 0.6822871999174;
string valueString = initialValue.ToString("R",
                                           CultureInfo.InvariantCulture);
double roundTripped = double.Parse(valueString,
                                   CultureInfo.InvariantCulture);
Console.WriteLine($"{initialValue:R} = {roundTripped:R}: {initialValue.Equals(roundTripped)}\n");

Console.WriteLine("Attempting to round-trip a Double with 'G17':");
string valueString17 = initialValue.ToString("G17",
                                             CultureInfo.InvariantCulture);
double roundTripped17 = double.Parse(valueString17,
                                     CultureInfo.InvariantCulture);
Console.WriteLine($"{initialValue:R} = {roundTripped17:R}: {initialValue.Equals(roundTripped17)}\n");
// If compiled to an application that targets anycpu or x64 and run on an x64 system,
// the example displays the following output:
//       Attempting to round-trip a Double with 'R':
//       .NET Framework:
//       0.6822871999174 = 0.68228719991740006: False
//       .NET:
//       0.6822871999174 = 0.6822871999174: True
//
//       Attempting to round-trip a Double with 'G17':
//       0.6822871999174 = 0.6822871999174: True
Imports System.Globalization

Module Example
    Public Sub Main()
        Console.WriteLine("Attempting to round-trip a Double with 'R':")
        Dim initialValue As Double = 0.6822871999174
        Dim valueString As String = initialValue.ToString("R",
                                                 CultureInfo.InvariantCulture)
        Dim roundTripped As Double = Double.Parse(valueString,
                                                  CultureInfo.InvariantCulture)
        Console.WriteLine("{0:R} = {1:R}: {2}",
                          initialValue, roundTripped, initialValue.Equals(roundTripped))
        Console.WriteLine()

        Console.WriteLine("Attempting to round-trip a Double with 'G17':")
        Dim valueString17 As String = initialValue.ToString("G17",
                                                   CultureInfo.InvariantCulture)
        Dim roundTripped17 As Double = double.Parse(valueString17,
                                              CultureInfo.InvariantCulture)
        Console.WriteLine("{0:R} = {1:R}: {2}",
                          initialValue, roundTripped17, initialValue.Equals(roundTripped17))
    End Sub
End Module
' If compiled to an application that targets anycpu or x64 and run on an x64 system,
' the example displays the following output:
'       Attempting to round-trip a Double with 'R':
'       .NET Framework:
'       0.6822871999174 = 0.68228719991740006: False
'       .NET:
'       0.6822871999174 = 0.6822871999174: True
'
'       Attempting to round-trip a Double with 'G17':
'       0.6822871999174 = 0.6822871999174: True

16진수 형식 지정자(X)

16진수("X") 형식 지정자는 숫자를 16진수 문자열로 변환합니다. 형식 지정자의 대/소문자는 9보다 큰 16진수에 대문자 또는 소문자를 사용할지 여부를 나타냅니다. 예를 들어 "X"를 사용하여 "ABCDEF"를 생성하고 "x"를 사용하여 "abcdef"를 생성합니다. 이 형식은 정수 형식에 대해서만 지원됩니다.

전체 자릿수 지정자는 결과 문자열에서 원하는 최소 자릿수를 나타냅니다. 필요한 경우 전체 자릿수 지정자가 지정한 자릿수를 생성하기 위해 숫자가 왼쪽에 0으로 채워집니다.

결과 문자열은 현재 NumberFormatInfo 개체의 서식 지정 정보의 영향을 받지 않습니다.

다음은 16진수 서식 Int32 지정자를 사용하여 값의 서식을 지정하는 예제입니다.

int value;

value = 0x2045e;
Console.WriteLine(value.ToString("x"));
// Displays 2045e
Console.WriteLine(value.ToString("X"));
// Displays 2045E
Console.WriteLine(value.ToString("X8"));
// Displays 0002045E

value = 123456789;
Console.WriteLine(value.ToString("X"));
// Displays 75BCD15
Console.WriteLine(value.ToString("X2"));
// Displays 75BCD15
Dim value As Integer

value = &h2045e
Console.WriteLine(value.ToString("x"))
' Displays 2045e
Console.WriteLine(value.ToString("X"))
' Displays 2045E
Console.WriteLine(value.ToString("X8"))
' Displays 0002045E

value = 123456789
Console.WriteLine(value.ToString("X"))
' Displays 75BCD15
Console.WriteLine(value.ToString("X2"))
' Displays 75BCD15

비고

이 섹션에는 표준 숫자 형식 문자열 사용에 대한 추가 정보가 포함되어 있습니다.

제어판 설정

제어판의 국가별 및 언어 옵션 항목의 설정은 서식 지정 작업으로 생성된 결과 문자열에 영향을 미칩니다. 이러한 설정은 서식을 제어하는 데 사용되는 값을 제공하는 현재 문화권과 연결된 개체를 초기화하는 NumberFormatInfo 데 사용됩니다. 다른 설정을 사용하는 컴퓨터는 다른 결과 문자열을 생성합니다.

또한 생성자를 사용하여 현재 시스템 문화권과 동일한 문화권을 나타내는 새 CultureInfo(String) 개체를 인스턴스화하는 경우 CultureInfo 제어판의 국가 및 언어 옵션 항목에 의해 설정된 모든 사용자 지정이 새 CultureInfo 개체에 적용됩니다. 생성자를 사용하여 CultureInfo(String, Boolean) 시스템의 사용자 지정을 CultureInfo 반영하지 않는 개체를 만들 수 있습니다.

NumberFormatInfo 속성

서식 지정은 현재 NumberFormatInfo 문화권에 의해 암시적으로 제공되거나 서식을 호출하는 메서드의 매개 변수에 의해 명시적으로 제공되는 현재 개체의 속성에 의해 IFormatProvider 영향을 받습니다. 해당 매개 변수에 NumberFormatInfo 대한 개체 또는 CultureInfo 개체를 지정합니다.

메모

숫자 값 서식 지정에 사용되는 패턴 또는 문자열을 사용자 지정하는 방법에 대한 자세한 내용은 클래스 항목을 참조 NumberFormatInfo 하세요.

정수 및 부동 소수점 숫자 형식

표준 숫자 형식 지정자에 대한 일부 설명은 정수 또는 부동 소수점 숫자 형식을 참조합니다. 정수 계열 숫자 형식은 Byte, SByte,Int16, Int32Int64, UInt16, UInt32UInt64BigInteger. 부동 소수점 숫자 형식은 Decimal, Half, SingleDouble.

부동 소수점 무한대 및 NaN

형식 문자열에 관계없이 , 또는 부동 소수점 형식의 Half값이 무한대, 음수 무한대이거나 숫자(NaN)가 아닌 경우 서식이 지정된 문자열은 현재 적용 가능한 Single 개체에 의해 지정된 각 DoublePositiveInfinitySymbolNegativeInfinitySymbol 또는 속성의 값입니다.NaNSymbolNumberFormatInfo

코드 예제

다음 예제에서는 en-US 문화권 및 모든 표준 숫자 형식 지정자를 사용하여 정수 및 부동 소수점 숫자 값의 서식을 지정합니다. 이 예제에서는 두 개의 특정 숫자 형식(DoubleInt32)을 사용하지만 다른 숫자 기본 형식(Byte, ,, SByte,Int16Int32Int64UInt16UInt32UInt64BigIntegerDecimalHalf, 및Single)에 대해 유사한 결과를 생성합니다.

// Display string representations of numbers for en-us culture
CultureInfo ci = new CultureInfo("en-us");

// Output floating point values
double floating = 10761.937554;
Console.WriteLine($"C: {floating.ToString("C", ci)}");           // Displays "C: $10,761.94"
Console.WriteLine($"E: {floating.ToString("E03", ci)}");         // Displays "E: 1.076E+004"
Console.WriteLine($"F: {floating.ToString("F04", ci)}");         // Displays "F: 10761.9376"
Console.WriteLine($"G: {floating.ToString("G", ci)}");           // Displays "G: 10761.937554"
Console.WriteLine($"N: {floating.ToString("N03", ci)}");         // Displays "N: 10,761.938"
Console.WriteLine($"P: {(floating/10000).ToString("P02", ci)}"); // Displays "P: 107.62 %"
Console.WriteLine($"R: {floating.ToString("R", ci)}");           // Displays "R: 10761.937554"
Console.WriteLine();

// Output integral values
int integral = 8395;
Console.WriteLine($"C: {integral.ToString("C", ci)}");           // Displays "C: $8,395.00"
Console.WriteLine($"D: {integral.ToString("D6", ci)}");          // Displays "D: 008395"
Console.WriteLine($"E: {integral.ToString("E03", ci)}");         // Displays "E: 8.395E+003"
Console.WriteLine($"F: {integral.ToString("F01", ci)}");         // Displays "F: 8395.0"
Console.WriteLine($"G: {integral.ToString("G", ci)}");           // Displays "G: 8395"
Console.WriteLine($"N: {integral.ToString("N01", ci)}");         // Displays "N: 8,395.0"
Console.WriteLine($"P: {(integral/10000.0).ToString("P02", ci)}"); // Displays "P: 83.95 %"
Console.WriteLine($"X: 0x{integral.ToString("X", ci)}");           // Displays "X: 0x20CB"
Console.WriteLine();
Option Strict On

Imports System.Globalization
Imports System.Threading

Module NumericFormats
    Public Sub Main()
        ' Display string representations of numbers for en-us culture
        Dim ci As New CultureInfo("en-us")

        ' Output floating point values
        Dim floating As Double = 10761.937554
        Console.WriteLine("C: {0}", _
                floating.ToString("C", ci))           ' Displays "C: $10,761.94"
        Console.WriteLine("E: {0}", _
                floating.ToString("E03", ci))         ' Displays "E: 1.076E+004"
        Console.WriteLine("F: {0}", _
                floating.ToString("F04", ci))         ' Displays "F: 10761.9376"         
        Console.WriteLine("G: {0}", _
                floating.ToString("G", ci))           ' Displays "G: 10761.937554"
        Console.WriteLine("N: {0}", _
                floating.ToString("N03", ci))         ' Displays "N: 10,761.938"
        Console.WriteLine("P: {0}", _
                (floating / 10000).ToString("P02", ci)) ' Displays "P: 107.62 %"
        Console.WriteLine("R: {0}", _
                floating.ToString("R", ci))           ' Displays "R: 10761.937554"            
        Console.WriteLine()

        ' Output integral values
        Dim integral As Integer = 8395
        Console.WriteLine("C: {0}", _
                integral.ToString("C", ci))           ' Displays "C: $8,395.00"
        Console.WriteLine("D: {0}", _
                integral.ToString("D6"))              ' Displays "D: 008395" 
        Console.WriteLine("E: {0}", _
                integral.ToString("E03", ci))         ' Displays "E: 8.395E+003"
        Console.WriteLine("F: {0}", _
                integral.ToString("F01", ci))         ' Displays "F: 8395.0"    
        Console.WriteLine("G: {0}", _
                integral.ToString("G", ci))           ' Displays "G: 8395"
        Console.WriteLine("N: {0}", _
                integral.ToString("N01", ci))         ' Displays "N: 8,395.0"
        Console.WriteLine("P: {0}", _
                (integral / 10000).ToString("P02", ci)) ' Displays "P: 83.95 %"
        Console.WriteLine("X: 0x{0}", _
                integral.ToString("X", ci))           ' Displays "X: 0x20CB"
        Console.WriteLine()
    End Sub
End Module

참고하십시오