C#idiomatic C#
custom-numeric-format-stringsstandard/base-types

Core library

Custom numeric format strings

Learn how to create a custom numeric format string to format numeric data in .NET. A custom numeric format string has one or more custom numeric specifiers.

  • page standard/base-types/custom-numeric-format-strings
  • updated 06/25/2018

You can create a custom numeric format string, which consists of one or more custom numeric specifiers, to define how to format numeric data. A custom numeric format string is any format string that is not a standard numeric format string.

Custom numeric format strings are supported by some overloads of the ToString method of all numeric types. For example, you can supply a numeric format string to the System.Int32.ToString%28System.String%29 and System.Int32.ToString%28System.String%2CSystem.IFormatProvider%29 methods of the System.Int32 type. Custom numeric format strings are also supported by the .NET composite formatting feature, which is used by some Write and WriteLine methods of the System.Console and System.IO.StreamWriter classes, the System.String.Format method, and the System.Text.StringBuilder.AppendFormat method. String interpolation feature also supports custom numeric format strings.

The following table describes the custom numeric format specifiers and displays sample output produced by each format specifier. See the Notes section for additional information about using custom numeric format strings, and the Example section for a comprehensive illustration of their use.

Format specifier Name Description Examples
"0" Zero placeholder Replaces the zero with the corresponding digit if one is present; otherwise, zero appears in the result string.

More information: The "0" Custom Specifier.
1234.5678 ("00000") -> 01235

0.45678 ("0.00", en-US) -> 0.46

0.45678 ("0.00", fr-FR) -> 0,46
"#" Digit placeholder Replaces the "#" symbol with the corresponding digit if one is present; otherwise, no digit appears in the result string.

Note that no digit appears in the result string if the corresponding digit in the input string is a non-significant 0. For example, 0003 ("####") -> 3.

More information: The "#" Custom Specifier.
1234.5678 ("#####") -> 1235

0.45678 ("#.##", en-US) -> .46

0.45678 ("#.##", fr-FR) -> ,46
"." Decimal point Determines the location of the decimal separator in the result string.

More information: The "." Custom Specifier.
0.45678 ("0.00", en-US) -> 0.46

0.45678 ("0.00", fr-FR) -> 0,46
"," Group separator and number scaling Serves as both a group separator and a number scaling specifier. As a group separator, it inserts a localized group separator character between each group. As a number scaling specifier, it divides a number by 1000 for each comma specified.

More information: The "," Custom Specifier.
Group separator specifier:

2147483647 ("##,#", en-US) -> 2,147,483,647

2147483647 ("##,#", es-ES) -> 2.147.483.647

Scaling specifier:

2147483647 ("#,#,,", en-US) -> 2,147

2147483647 ("#,#,,", es-ES) -> 2.147
"%" Percentage placeholder Multiplies a number by 100 and inserts a localized percentage symbol in the result string.

More information: The "%" Custom Specifier.
0.3697 ("%#0.00", en-US) -> %36.97

0.3697 ("%#0.00", el-GR) -> %36,97

0.3697 ("##.0 %", en-US) -> 37.0 %

0.3697 ("##.0 %", el-GR) -> 37,0 %
"‰" Per mille placeholder Multiplies a number by 1000 and inserts a localized per mille symbol in the result string.

More information: The "‰" Custom Specifier.
0.03697 ("#0.00‰", en-US) -> 36.97‰

0.03697 ("#0.00‰", ru-RU) -> 36,97‰
"E0"

"E+0"

"E-0"

"e0"

"e+0"

"e-0"
Exponential notation If followed by at least one 0 (zero), formats the result using exponential notation. The case of "E" or "e" indicates the case of the exponent symbol in the result string. The number of zeros following the "E" or "e" character determines the minimum number of digits in the exponent. A plus sign (+) indicates that a sign character always precedes the exponent. A minus sign (-) indicates that a sign character precedes only negative exponents.

More information: The "E" and "e" Custom Specifiers.
987654 ("#0.0e0") -> 98.8e4

1503.92311 ("0.0##e+00") -> 1.504e+03

1.8901385E-16 ("0.0e+00") -> 1.9e-16
"\" Escape character Causes the next character to be interpreted as a literal rather than as a custom format specifier.

More information: The "\" Escape Character.
987654 ("\###00\#") -> #987654#
'string'

"string"
Literal string delimiter Indicates that the enclosed characters should be copied to the result string unchanged.

More information: Character literals.
68 ("# 'degrees'") -> 68 degrees

68 ("#' degrees'") -> 68 degrees
; Section separator Defines sections with separate format strings for positive, negative, and zero numbers.

More information: The ";" Section Separator.
12.345 ("#0.0#;(#0.0#);-\0-") -> 12.35

0 ("#0.0#;(#0.0#);-\0-") -> -0-

-12.345 ("#0.0#;(#0.0#);-\0-") -> (12.35)

12.345 ("#0.0#;(#0.0#)") -> 12.35

0 ("#0.0#;(#0.0#)") -> 0.0

-12.345 ("#0.0#;(#0.0#)") -> (12.35)
Other All other characters The character is copied to the result string unchanged.

More information: Character literals.
68 ("# °") -> 68 °

The following sections provide detailed information about each of the custom numeric format specifiers.

The "0" custom specifier

The "0" custom format specifier serves as a zero-placeholder symbol. If the value that is being formatted has a digit in the position where the zero appears in the format string, that digit is copied to the result string; otherwise, a zero appears in the result string. The position of the leftmost zero before the decimal point and the rightmost zero after the decimal point determines the range of digits that are always present in the result string.

The "00" specifier causes the value to be rounded to the nearest digit preceding the decimal, where rounding away from zero is always used. For example, formatting 34.5 with "00" would result in the value 35.

The following example displays several values that are formatted by using custom format strings that include zero placeholders.

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/cs/custom.cs1

csharp
using System;
using System.Globalization;

public class CustomNumericFormatting
{
   public static void Main()
   {
      Console.WriteLine("Zero Placeholder:");
      ShowZeroPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Digit Placeholder:");
      ShowDigitPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Decimal Point:");
      ShowDecimalPoint();
      Console.WriteLine();
      Console.WriteLine("Thousand Specifier:");
      ShowThousandSpecifier();
      Console.WriteLine();
      Console.WriteLine("Scaling Specifier:");
      ShowScalingSpecifier();
      Console.WriteLine();
      Console.WriteLine("Percentage Placeholder:");
      ShowPercentagePlaceholder();
      Console.WriteLine();
      Console.WriteLine("Scientific Notation:");
      ShowScientificNotation();
      Console.WriteLine();
      Console.WriteLine("Section Specifier:");
      ShowSectionSpecifier();
      Console.WriteLine();
      Console.WriteLine("Per Mille Placeholder:");
      ShowPerMillePlaceholder();
   }

   private static void ShowZeroPlaceholder()
   {
      // <Snippet1>
      double value;

      value = 123;
      Console.WriteLine(value.ToString("00000"));
      Console.WriteLine(String.Format("{0:00000}", value));
      // Displays 00123

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      CultureInfo daDK = CultureInfo.CreateSpecificCulture("da-DK");
      Console.WriteLine(value.ToString("00.00", daDK));
      Console.WriteLine(String.Format(daDK, "{0:00.00}", value));
      // Displays 01,20

      value = .56;
      Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.0}", value));
      // Displays 0.6

      value = 1234567890;
      Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0}", value));	
      // Displays 1,234,567,890

      CultureInfo elGR = CultureInfo.CreateSpecificCulture("el-GR");
      Console.WriteLine(value.ToString("0,0", elGR));	
     Console.WriteLine(String.Format(elGR, "{0:0,0}", value));	
      // Displays 1.234.567.890

      value = 1234567890.123456;
      Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.0}", value));	
      // Displays 1,234,567,890.1

      value = 1234.567890;
      Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.00}", value));	
      // Displays 1,234.57
      // </Snippet1>
   }

   private static void ShowDigitPlaceholder()
   {
      // <Snippet2>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#.##}", value));
      // Displays 1.2

      value = 123;
      Console.WriteLine(value.ToString("#####"));
      Console.WriteLine(String.Format("{0:#####}", value));
      // Displays 123

      value = 123456;
      Console.WriteLine(value.ToString("[##-##-##]"));
      Console.WriteLine(String.Format("{0:[##-##-##]}", value));
	   // Displays [12-34-56]

      value = 1234567890;
      Console.WriteLine(value.ToString("#"));
      Console.WriteLine(String.Format("{0:#}", value));
      // Displays 1234567890

      Console.WriteLine(value.ToString("(###) ###-####"));
      Console.WriteLine(String.Format("{0:(###) ###-####}", value));
      // Displays (123) 456-7890
      // </Snippet2>
   }

   private static void ShowDecimalPoint()
   {
      // <Snippet3>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      Console.WriteLine(value.ToString("00.00",
                        CultureInfo.CreateSpecificCulture("da-DK")));
      Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                        "{0:00.00}", value));
      // Displays 01,20

      value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%

      value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.###E+0}", value));
	   // Displays 8.6E+4
      // </Snippet3>
   }

   private static void ShowThousandSpecifier()
   {
      // <Snippet4>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,#}", value));
      // Displays 1,234,567,890

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
      // Displays 1,235      	
      // </Snippet4>
   }

   private static void ShowScalingSpecifier()
   {
      // <Snippet5>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,}", value));	
      // Displays 1235

      Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,,}", value));
	  // Displays 1

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
	  // Displays 1,235
      // </Snippet5>
   }

   private static void ShowPercentagePlaceholder()
   {
      // <Snippet6>
      double value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%
      // </Snippet6>
   }

   private static void ShowScientificNotation()
   {
      // <Snippet7>
      double value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+0}", value));
      // Displays 8.6E+4

      Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+000}", value));
      // Displays 8.6E+004

      Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E-000}", value));
      // Displays 8.6E004
      // </Snippet7>
   }

   private static void ShowSectionSpecifier()
   {
      // <Snippet8>
      double posValue = 1234;
      double negValue = -1234;
      double zeroValue = 0;

      string fmt2 = "##;(##)";
      string fmt3 = "##;(##);**Zero**";

      Console.WriteLine(posValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue));
      // Displays 1234

      Console.WriteLine(negValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue));
      // Displays (1234)

      Console.WriteLine(zeroValue.ToString(fmt3));
      Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue));
      // Displays **Zero**
      // </Snippet8>
   }

   private static void ShowPerMillePlaceholder()
   {
      // <Snippet9>
      double value = .00354;
      string perMilleFmt = "#0.## " + '\u2030';
      Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:" + perMilleFmt + "}", value));
      // Displays 3.54‰
      // </Snippet9>
   }
}

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/vb/Custom.vb1

vb
' Visual Basic .NET Document
Option Strict On

Imports System.Globalization

Module CustomNumericFormatting
    Public Sub Main()
        Console.WriteLine("Zero Placeholder:")
        ShowZeroPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Digit Placeholder:")
        ShowDigitPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Decimal Point:")
        ShowDecimalPoint()
        Console.WriteLine()
        Console.WriteLine("Thousand Specifier:")
        ShowThousandSpecifier()
        Console.WriteLine()
        Console.WriteLine("Scaling Specifier:")
        ShowScalingSpecifier()
        Console.WriteLine()
        Console.WriteLine("Percentage Placeholder:")
        ShowPercentagePlaceholder()
        Console.WriteLine()
        Console.WriteLine("Scientific Notation:")
        ShowScientificNotation()
        Console.WriteLine()
        Console.WriteLine("Section Specifier:")
        ShowSectionSpecifier()
        Console.WriteLine()
        Console.WriteLine("Per Mille Placeholder:")
        ShowPerMillePlaceholder()
    End Sub

    Private Sub ShowZeroPlaceHolder()
        ' <Snippet1>
        Dim value As Double

        value = 123
        Console.WriteLine(value.ToString("00000"))
        Console.WriteLine(String.Format("{0:00000}", value))
        ' Displays 00123

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.00}", value))
        ' Displays 1.20
        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20
        Dim daDK As CultureInfo = CultureInfo.CreateSpecificCulture("da-DK")
        Console.WriteLine(value.ToString("00.00", daDK))
        Console.WriteLine(String.Format(daDK, "{0:00.00}", value))
        ' Displays 01,20

        value = .56
        Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.0}", value))
        ' Displays 0.6

        value = 1234567890
        Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0}", value))
        ' Displays 1,234,567,890
        Dim elGR As CultureInfo = CultureInfo.CreateSpecificCulture("el-GR")
        Console.WriteLine(value.ToString("0,0", elGR))
        Console.WriteLine(String.Format(elGR, "{0:0,0}", value))
        ' Displays 1.234.567.890

        value = 1234567890.123456
        Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.0}", value))
        ' Displays 1,234,567,890.1

        value = 1234.567890
        Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.00}", value))
        ' Displays 1,234.57
        ' </Snippet1>
    End Sub

    Private Sub ShowDigitPlaceholder()
        ' <Snippet2>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#.##}", value))
        ' Displays 1.2

        value = 123
        Console.WriteLine(value.ToString("#####"))
        Console.WriteLine(String.Format("{0:#####}", value))
        ' Displays 123

        value = 123456
        Console.WriteLine(value.ToString("[##-##-##]"))
        Console.WriteLine(String.Format("{0:[##-##-##]}", value))
        ' Displays [12-34-56]

        value = 1234567890
        Console.WriteLine(value.ToString("#"))
        Console.WriteLine(String.Format("{0:#}", value))
        ' Displays 1234567890

        Console.WriteLine(value.ToString("(###) ###-####"))
        Console.WriteLine(String.Format("{0:(###) ###-####}", value))
        ' Displays (123) 456-7890
        ' </Snippet2>
    End Sub

    Private Sub ShowDecimalPoint()
        ' <Snippet3>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.00}", value))
        ' Displays 1.20

        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20

        Console.WriteLine(value.ToString("00.00", _
                          CultureInfo.CreateSpecificCulture("da-DK")))
        Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                          "{0:00.00}", value))
        ' Displays 01,20

        value = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%

        value = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.###E+0}", value))
        ' Displays 8.6E+4
        ' </Snippet3>
    End Sub

    Private Sub ShowThousandSpecifier
        ' <Snippet4>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,#}", value))
        ' Displays 1,234,567,890

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet4>
    End Sub

    Private Sub ShowScalingSpecifier
        ' <Snippet5>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0:#,,}", value))
        ' Displays 1235

        Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,,,}", value))
        ' Displays 1

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet5>
    End Sub

    Private Sub ShowPercentagePlaceholder()
        ' <Snippet6>
        Dim value As Double = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%
        ' </Snippet6>
    End Sub

    Private Sub ShowScientificNotation()
        ' <Snippet7>
        Dim value As Double = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+0}", value))
        ' Displays 8.6E+4

        Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+000}", value))
        ' Displays 8.6E+004

        Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E-000}", value))
        ' Displays 8.6E004
        ' </Snippet7>
    End Sub

    Private Sub ShowSectionSpecifier()
        ' <Snippet8>
        Dim posValue As Double = 1234
        Dim negValue As Double = -1234
        Dim zeroValue As Double = 0

        Dim fmt2 As String = "##;(##)"
        Dim fmt3 As String = "##;(##);**Zero**"

        Console.WriteLine(posValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue))
        ' Displays 1234

        Console.WriteLine(negValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue))
        ' Displays (1234)

        Console.WriteLine(zeroValue.ToString(fmt3))
        Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue))
        ' Displays **Zero**
        ' </Snippet8>
    End Sub

    Private Sub ShowPerMillePlaceholder()
        ' <Snippet9>
        Dim value As Double = .00354
        Dim perMilleFmt As String = "#0.## " & ChrW(&h2030)
        Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:" + perMilleFmt + "}", value))
        ' Displays 3.54 ‰
        ' </Snippet9>
    End Sub
End Module

Back to table

The "#" custom specifier

The "#" custom format specifier serves as a digit-placeholder symbol. If the value that is being formatted has a digit in the position where the "#" symbol appears in the format string, that digit is copied to the result string. Otherwise, nothing is stored in that position in the result string.

Note that this specifier never displays a zero that is not a significant digit, even if zero is the only digit in the string. It will display zero only if it is a significant digit in the number that is being displayed.

The "##" format string causes the value to be rounded to the nearest digit preceding the decimal, where rounding away from zero is always used. For example, formatting 34.5 with "##" would result in the value 35.

The following example displays several values that are formatted by using custom format strings that include digit placeholders.

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/cs/custom.cs2

csharp
using System;
using System.Globalization;

public class CustomNumericFormatting
{
   public static void Main()
   {
      Console.WriteLine("Zero Placeholder:");
      ShowZeroPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Digit Placeholder:");
      ShowDigitPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Decimal Point:");
      ShowDecimalPoint();
      Console.WriteLine();
      Console.WriteLine("Thousand Specifier:");
      ShowThousandSpecifier();
      Console.WriteLine();
      Console.WriteLine("Scaling Specifier:");
      ShowScalingSpecifier();
      Console.WriteLine();
      Console.WriteLine("Percentage Placeholder:");
      ShowPercentagePlaceholder();
      Console.WriteLine();
      Console.WriteLine("Scientific Notation:");
      ShowScientificNotation();
      Console.WriteLine();
      Console.WriteLine("Section Specifier:");
      ShowSectionSpecifier();
      Console.WriteLine();
      Console.WriteLine("Per Mille Placeholder:");
      ShowPerMillePlaceholder();
   }

   private static void ShowZeroPlaceholder()
   {
      // <Snippet1>
      double value;

      value = 123;
      Console.WriteLine(value.ToString("00000"));
      Console.WriteLine(String.Format("{0:00000}", value));
      // Displays 00123

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      CultureInfo daDK = CultureInfo.CreateSpecificCulture("da-DK");
      Console.WriteLine(value.ToString("00.00", daDK));
      Console.WriteLine(String.Format(daDK, "{0:00.00}", value));
      // Displays 01,20

      value = .56;
      Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.0}", value));
      // Displays 0.6

      value = 1234567890;
      Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0}", value));	
      // Displays 1,234,567,890

      CultureInfo elGR = CultureInfo.CreateSpecificCulture("el-GR");
      Console.WriteLine(value.ToString("0,0", elGR));	
     Console.WriteLine(String.Format(elGR, "{0:0,0}", value));	
      // Displays 1.234.567.890

      value = 1234567890.123456;
      Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.0}", value));	
      // Displays 1,234,567,890.1

      value = 1234.567890;
      Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.00}", value));	
      // Displays 1,234.57
      // </Snippet1>
   }

   private static void ShowDigitPlaceholder()
   {
      // <Snippet2>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#.##}", value));
      // Displays 1.2

      value = 123;
      Console.WriteLine(value.ToString("#####"));
      Console.WriteLine(String.Format("{0:#####}", value));
      // Displays 123

      value = 123456;
      Console.WriteLine(value.ToString("[##-##-##]"));
      Console.WriteLine(String.Format("{0:[##-##-##]}", value));
	   // Displays [12-34-56]

      value = 1234567890;
      Console.WriteLine(value.ToString("#"));
      Console.WriteLine(String.Format("{0:#}", value));
      // Displays 1234567890

      Console.WriteLine(value.ToString("(###) ###-####"));
      Console.WriteLine(String.Format("{0:(###) ###-####}", value));
      // Displays (123) 456-7890
      // </Snippet2>
   }

   private static void ShowDecimalPoint()
   {
      // <Snippet3>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      Console.WriteLine(value.ToString("00.00",
                        CultureInfo.CreateSpecificCulture("da-DK")));
      Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                        "{0:00.00}", value));
      // Displays 01,20

      value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%

      value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.###E+0}", value));
	   // Displays 8.6E+4
      // </Snippet3>
   }

   private static void ShowThousandSpecifier()
   {
      // <Snippet4>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,#}", value));
      // Displays 1,234,567,890

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
      // Displays 1,235      	
      // </Snippet4>
   }

   private static void ShowScalingSpecifier()
   {
      // <Snippet5>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,}", value));	
      // Displays 1235

      Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,,}", value));
	  // Displays 1

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
	  // Displays 1,235
      // </Snippet5>
   }

   private static void ShowPercentagePlaceholder()
   {
      // <Snippet6>
      double value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%
      // </Snippet6>
   }

   private static void ShowScientificNotation()
   {
      // <Snippet7>
      double value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+0}", value));
      // Displays 8.6E+4

      Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+000}", value));
      // Displays 8.6E+004

      Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E-000}", value));
      // Displays 8.6E004
      // </Snippet7>
   }

   private static void ShowSectionSpecifier()
   {
      // <Snippet8>
      double posValue = 1234;
      double negValue = -1234;
      double zeroValue = 0;

      string fmt2 = "##;(##)";
      string fmt3 = "##;(##);**Zero**";

      Console.WriteLine(posValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue));
      // Displays 1234

      Console.WriteLine(negValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue));
      // Displays (1234)

      Console.WriteLine(zeroValue.ToString(fmt3));
      Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue));
      // Displays **Zero**
      // </Snippet8>
   }

   private static void ShowPerMillePlaceholder()
   {
      // <Snippet9>
      double value = .00354;
      string perMilleFmt = "#0.## " + '\u2030';
      Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:" + perMilleFmt + "}", value));
      // Displays 3.54‰
      // </Snippet9>
   }
}

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/vb/Custom.vb2

vb
' Visual Basic .NET Document
Option Strict On

Imports System.Globalization

Module CustomNumericFormatting
    Public Sub Main()
        Console.WriteLine("Zero Placeholder:")
        ShowZeroPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Digit Placeholder:")
        ShowDigitPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Decimal Point:")
        ShowDecimalPoint()
        Console.WriteLine()
        Console.WriteLine("Thousand Specifier:")
        ShowThousandSpecifier()
        Console.WriteLine()
        Console.WriteLine("Scaling Specifier:")
        ShowScalingSpecifier()
        Console.WriteLine()
        Console.WriteLine("Percentage Placeholder:")
        ShowPercentagePlaceholder()
        Console.WriteLine()
        Console.WriteLine("Scientific Notation:")
        ShowScientificNotation()
        Console.WriteLine()
        Console.WriteLine("Section Specifier:")
        ShowSectionSpecifier()
        Console.WriteLine()
        Console.WriteLine("Per Mille Placeholder:")
        ShowPerMillePlaceholder()
    End Sub

    Private Sub ShowZeroPlaceHolder()
        ' <Snippet1>
        Dim value As Double

        value = 123
        Console.WriteLine(value.ToString("00000"))
        Console.WriteLine(String.Format("{0:00000}", value))
        ' Displays 00123

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.00}", value))
        ' Displays 1.20
        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20
        Dim daDK As CultureInfo = CultureInfo.CreateSpecificCulture("da-DK")
        Console.WriteLine(value.ToString("00.00", daDK))
        Console.WriteLine(String.Format(daDK, "{0:00.00}", value))
        ' Displays 01,20

        value = .56
        Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.0}", value))
        ' Displays 0.6

        value = 1234567890
        Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0}", value))
        ' Displays 1,234,567,890
        Dim elGR As CultureInfo = CultureInfo.CreateSpecificCulture("el-GR")
        Console.WriteLine(value.ToString("0,0", elGR))
        Console.WriteLine(String.Format(elGR, "{0:0,0}", value))
        ' Displays 1.234.567.890

        value = 1234567890.123456
        Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.0}", value))
        ' Displays 1,234,567,890.1

        value = 1234.567890
        Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.00}", value))
        ' Displays 1,234.57
        ' </Snippet1>
    End Sub

    Private Sub ShowDigitPlaceholder()
        ' <Snippet2>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#.##}", value))
        ' Displays 1.2

        value = 123
        Console.WriteLine(value.ToString("#####"))
        Console.WriteLine(String.Format("{0:#####}", value))
        ' Displays 123

        value = 123456
        Console.WriteLine(value.ToString("[##-##-##]"))
        Console.WriteLine(String.Format("{0:[##-##-##]}", value))
        ' Displays [12-34-56]

        value = 1234567890
        Console.WriteLine(value.ToString("#"))
        Console.WriteLine(String.Format("{0:#}", value))
        ' Displays 1234567890

        Console.WriteLine(value.ToString("(###) ###-####"))
        Console.WriteLine(String.Format("{0:(###) ###-####}", value))
        ' Displays (123) 456-7890
        ' </Snippet2>
    End Sub

    Private Sub ShowDecimalPoint()
        ' <Snippet3>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.00}", value))
        ' Displays 1.20

        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20

        Console.WriteLine(value.ToString("00.00", _
                          CultureInfo.CreateSpecificCulture("da-DK")))
        Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                          "{0:00.00}", value))
        ' Displays 01,20

        value = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%

        value = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.###E+0}", value))
        ' Displays 8.6E+4
        ' </Snippet3>
    End Sub

    Private Sub ShowThousandSpecifier
        ' <Snippet4>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,#}", value))
        ' Displays 1,234,567,890

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet4>
    End Sub

    Private Sub ShowScalingSpecifier
        ' <Snippet5>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0:#,,}", value))
        ' Displays 1235

        Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,,,}", value))
        ' Displays 1

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet5>
    End Sub

    Private Sub ShowPercentagePlaceholder()
        ' <Snippet6>
        Dim value As Double = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%
        ' </Snippet6>
    End Sub

    Private Sub ShowScientificNotation()
        ' <Snippet7>
        Dim value As Double = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+0}", value))
        ' Displays 8.6E+4

        Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+000}", value))
        ' Displays 8.6E+004

        Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E-000}", value))
        ' Displays 8.6E004
        ' </Snippet7>
    End Sub

    Private Sub ShowSectionSpecifier()
        ' <Snippet8>
        Dim posValue As Double = 1234
        Dim negValue As Double = -1234
        Dim zeroValue As Double = 0

        Dim fmt2 As String = "##;(##)"
        Dim fmt3 As String = "##;(##);**Zero**"

        Console.WriteLine(posValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue))
        ' Displays 1234

        Console.WriteLine(negValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue))
        ' Displays (1234)

        Console.WriteLine(zeroValue.ToString(fmt3))
        Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue))
        ' Displays **Zero**
        ' </Snippet8>
    End Sub

    Private Sub ShowPerMillePlaceholder()
        ' <Snippet9>
        Dim value As Double = .00354
        Dim perMilleFmt As String = "#0.## " & ChrW(&h2030)
        Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:" + perMilleFmt + "}", value))
        ' Displays 3.54 ‰
        ' </Snippet9>
    End Sub
End Module

To return a result string in which absent digits or leading zeroes are replaced by spaces, use the composite formatting feature and specify a field width, as the following example illustrates.

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/cs/SpaceOrDigit1.cs12

csharp
// <Snippet12>
using System;

public class SpaceOrDigit
{
   public static void Main()
   {
      Double value = .324;
      Console.WriteLine("The value is: '{0,5:#.###}'", value);
   }
}
// The example displays the following output if the current culture
// is en-US:
//      The value is: ' .324'
// </Snippet12>

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/vb/SpaceOrDigit1.vb12

vb
' Visual Basic .NET Document
Option Strict On

' <Snippet12>
Module SpaceExample
    Public Sub Main()
        Dim value As Double = 0.324
        Console.WriteLine("The value is: '{0,5:#.###}'", value)
    End Sub
End Module

' The example displays the following output if the current culture
' is en-US:
'      The value is: ' .324'
' </Snippet12>

Back to table

The "." custom specifier

The "." custom format specifier inserts a localized decimal separator into the result string. The first period in the format string determines the location of the decimal separator in the formatted value; any additional periods are ignored. If the format specifier ends with a "." only the significant digits are formatted into the result string.

The character that is used as the decimal separator in the result string is not always a period; it is determined by the System.Globalization.NumberFormatInfo.NumberDecimalSeparator property of the System.Globalization.NumberFormatInfo object that controls formatting.

The following example uses the "." format specifier to define the location of the decimal point in several result strings.

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/cs/custom.cs3

csharp
using System;
using System.Globalization;

public class CustomNumericFormatting
{
   public static void Main()
   {
      Console.WriteLine("Zero Placeholder:");
      ShowZeroPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Digit Placeholder:");
      ShowDigitPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Decimal Point:");
      ShowDecimalPoint();
      Console.WriteLine();
      Console.WriteLine("Thousand Specifier:");
      ShowThousandSpecifier();
      Console.WriteLine();
      Console.WriteLine("Scaling Specifier:");
      ShowScalingSpecifier();
      Console.WriteLine();
      Console.WriteLine("Percentage Placeholder:");
      ShowPercentagePlaceholder();
      Console.WriteLine();
      Console.WriteLine("Scientific Notation:");
      ShowScientificNotation();
      Console.WriteLine();
      Console.WriteLine("Section Specifier:");
      ShowSectionSpecifier();
      Console.WriteLine();
      Console.WriteLine("Per Mille Placeholder:");
      ShowPerMillePlaceholder();
   }

   private static void ShowZeroPlaceholder()
   {
      // <Snippet1>
      double value;

      value = 123;
      Console.WriteLine(value.ToString("00000"));
      Console.WriteLine(String.Format("{0:00000}", value));
      // Displays 00123

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      CultureInfo daDK = CultureInfo.CreateSpecificCulture("da-DK");
      Console.WriteLine(value.ToString("00.00", daDK));
      Console.WriteLine(String.Format(daDK, "{0:00.00}", value));
      // Displays 01,20

      value = .56;
      Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.0}", value));
      // Displays 0.6

      value = 1234567890;
      Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0}", value));	
      // Displays 1,234,567,890

      CultureInfo elGR = CultureInfo.CreateSpecificCulture("el-GR");
      Console.WriteLine(value.ToString("0,0", elGR));	
     Console.WriteLine(String.Format(elGR, "{0:0,0}", value));	
      // Displays 1.234.567.890

      value = 1234567890.123456;
      Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.0}", value));	
      // Displays 1,234,567,890.1

      value = 1234.567890;
      Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.00}", value));	
      // Displays 1,234.57
      // </Snippet1>
   }

   private static void ShowDigitPlaceholder()
   {
      // <Snippet2>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#.##}", value));
      // Displays 1.2

      value = 123;
      Console.WriteLine(value.ToString("#####"));
      Console.WriteLine(String.Format("{0:#####}", value));
      // Displays 123

      value = 123456;
      Console.WriteLine(value.ToString("[##-##-##]"));
      Console.WriteLine(String.Format("{0:[##-##-##]}", value));
	   // Displays [12-34-56]

      value = 1234567890;
      Console.WriteLine(value.ToString("#"));
      Console.WriteLine(String.Format("{0:#}", value));
      // Displays 1234567890

      Console.WriteLine(value.ToString("(###) ###-####"));
      Console.WriteLine(String.Format("{0:(###) ###-####}", value));
      // Displays (123) 456-7890
      // </Snippet2>
   }

   private static void ShowDecimalPoint()
   {
      // <Snippet3>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      Console.WriteLine(value.ToString("00.00",
                        CultureInfo.CreateSpecificCulture("da-DK")));
      Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                        "{0:00.00}", value));
      // Displays 01,20

      value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%

      value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.###E+0}", value));
	   // Displays 8.6E+4
      // </Snippet3>
   }

   private static void ShowThousandSpecifier()
   {
      // <Snippet4>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,#}", value));
      // Displays 1,234,567,890

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
      // Displays 1,235      	
      // </Snippet4>
   }

   private static void ShowScalingSpecifier()
   {
      // <Snippet5>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,}", value));	
      // Displays 1235

      Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,,}", value));
	  // Displays 1

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
	  // Displays 1,235
      // </Snippet5>
   }

   private static void ShowPercentagePlaceholder()
   {
      // <Snippet6>
      double value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%
      // </Snippet6>
   }

   private static void ShowScientificNotation()
   {
      // <Snippet7>
      double value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+0}", value));
      // Displays 8.6E+4

      Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+000}", value));
      // Displays 8.6E+004

      Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E-000}", value));
      // Displays 8.6E004
      // </Snippet7>
   }

   private static void ShowSectionSpecifier()
   {
      // <Snippet8>
      double posValue = 1234;
      double negValue = -1234;
      double zeroValue = 0;

      string fmt2 = "##;(##)";
      string fmt3 = "##;(##);**Zero**";

      Console.WriteLine(posValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue));
      // Displays 1234

      Console.WriteLine(negValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue));
      // Displays (1234)

      Console.WriteLine(zeroValue.ToString(fmt3));
      Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue));
      // Displays **Zero**
      // </Snippet8>
   }

   private static void ShowPerMillePlaceholder()
   {
      // <Snippet9>
      double value = .00354;
      string perMilleFmt = "#0.## " + '\u2030';
      Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:" + perMilleFmt + "}", value));
      // Displays 3.54‰
      // </Snippet9>
   }
}

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/vb/Custom.vb3

vb
' Visual Basic .NET Document
Option Strict On

Imports System.Globalization

Module CustomNumericFormatting
    Public Sub Main()
        Console.WriteLine("Zero Placeholder:")
        ShowZeroPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Digit Placeholder:")
        ShowDigitPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Decimal Point:")
        ShowDecimalPoint()
        Console.WriteLine()
        Console.WriteLine("Thousand Specifier:")
        ShowThousandSpecifier()
        Console.WriteLine()
        Console.WriteLine("Scaling Specifier:")
        ShowScalingSpecifier()
        Console.WriteLine()
        Console.WriteLine("Percentage Placeholder:")
        ShowPercentagePlaceholder()
        Console.WriteLine()
        Console.WriteLine("Scientific Notation:")
        ShowScientificNotation()
        Console.WriteLine()
        Console.WriteLine("Section Specifier:")
        ShowSectionSpecifier()
        Console.WriteLine()
        Console.WriteLine("Per Mille Placeholder:")
        ShowPerMillePlaceholder()
    End Sub

    Private Sub ShowZeroPlaceHolder()
        ' <Snippet1>
        Dim value As Double

        value = 123
        Console.WriteLine(value.ToString("00000"))
        Console.WriteLine(String.Format("{0:00000}", value))
        ' Displays 00123

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.00}", value))
        ' Displays 1.20
        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20
        Dim daDK As CultureInfo = CultureInfo.CreateSpecificCulture("da-DK")
        Console.WriteLine(value.ToString("00.00", daDK))
        Console.WriteLine(String.Format(daDK, "{0:00.00}", value))
        ' Displays 01,20

        value = .56
        Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.0}", value))
        ' Displays 0.6

        value = 1234567890
        Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0}", value))
        ' Displays 1,234,567,890
        Dim elGR As CultureInfo = CultureInfo.CreateSpecificCulture("el-GR")
        Console.WriteLine(value.ToString("0,0", elGR))
        Console.WriteLine(String.Format(elGR, "{0:0,0}", value))
        ' Displays 1.234.567.890

        value = 1234567890.123456
        Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.0}", value))
        ' Displays 1,234,567,890.1

        value = 1234.567890
        Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.00}", value))
        ' Displays 1,234.57
        ' </Snippet1>
    End Sub

    Private Sub ShowDigitPlaceholder()
        ' <Snippet2>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#.##}", value))
        ' Displays 1.2

        value = 123
        Console.WriteLine(value.ToString("#####"))
        Console.WriteLine(String.Format("{0:#####}", value))
        ' Displays 123

        value = 123456
        Console.WriteLine(value.ToString("[##-##-##]"))
        Console.WriteLine(String.Format("{0:[##-##-##]}", value))
        ' Displays [12-34-56]

        value = 1234567890
        Console.WriteLine(value.ToString("#"))
        Console.WriteLine(String.Format("{0:#}", value))
        ' Displays 1234567890

        Console.WriteLine(value.ToString("(###) ###-####"))
        Console.WriteLine(String.Format("{0:(###) ###-####}", value))
        ' Displays (123) 456-7890
        ' </Snippet2>
    End Sub

    Private Sub ShowDecimalPoint()
        ' <Snippet3>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.00}", value))
        ' Displays 1.20

        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20

        Console.WriteLine(value.ToString("00.00", _
                          CultureInfo.CreateSpecificCulture("da-DK")))
        Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                          "{0:00.00}", value))
        ' Displays 01,20

        value = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%

        value = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.###E+0}", value))
        ' Displays 8.6E+4
        ' </Snippet3>
    End Sub

    Private Sub ShowThousandSpecifier
        ' <Snippet4>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,#}", value))
        ' Displays 1,234,567,890

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet4>
    End Sub

    Private Sub ShowScalingSpecifier
        ' <Snippet5>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0:#,,}", value))
        ' Displays 1235

        Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,,,}", value))
        ' Displays 1

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet5>
    End Sub

    Private Sub ShowPercentagePlaceholder()
        ' <Snippet6>
        Dim value As Double = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%
        ' </Snippet6>
    End Sub

    Private Sub ShowScientificNotation()
        ' <Snippet7>
        Dim value As Double = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+0}", value))
        ' Displays 8.6E+4

        Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+000}", value))
        ' Displays 8.6E+004

        Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E-000}", value))
        ' Displays 8.6E004
        ' </Snippet7>
    End Sub

    Private Sub ShowSectionSpecifier()
        ' <Snippet8>
        Dim posValue As Double = 1234
        Dim negValue As Double = -1234
        Dim zeroValue As Double = 0

        Dim fmt2 As String = "##;(##)"
        Dim fmt3 As String = "##;(##);**Zero**"

        Console.WriteLine(posValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue))
        ' Displays 1234

        Console.WriteLine(negValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue))
        ' Displays (1234)

        Console.WriteLine(zeroValue.ToString(fmt3))
        Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue))
        ' Displays **Zero**
        ' </Snippet8>
    End Sub

    Private Sub ShowPerMillePlaceholder()
        ' <Snippet9>
        Dim value As Double = .00354
        Dim perMilleFmt As String = "#0.## " & ChrW(&h2030)
        Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:" + perMilleFmt + "}", value))
        ' Displays 3.54 ‰
        ' </Snippet9>
    End Sub
End Module

Back to table

The "," custom specifier

The "," character serves as both a group separator and a number scaling specifier.

  • Group separator: If one or more commas are specified between two digit placeholders (0 or #) that format the integral digits of a number, a group separator character is inserted between each number group in the integral part of the output.

    The System.Globalization.NumberFormatInfo.NumberGroupSeparator and System.Globalization.NumberFormatInfo.NumberGroupSizes properties of the current System.Globalization.NumberFormatInfo object determine the character used as the number group separator and the size of each number group. For example, if the string "#,#" and the invariant culture are used to format the number 1000, the output is "1,000".

  • Number scaling specifier: If one or more commas are specified immediately to the left of the explicit or implicit decimal point, the number to be formatted is divided by 1000 for each comma. For example, if the string "0,," is used to format the number 100 million, the output is "100".

You can use group separator and number scaling specifiers in the same format string. For example, if the string "#,0,," and the invariant culture are used to format the number one billion, the output is "1,000".

The following example illustrates the use of the comma as a group separator.

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/cs/custom.cs4

csharp
using System;
using System.Globalization;

public class CustomNumericFormatting
{
   public static void Main()
   {
      Console.WriteLine("Zero Placeholder:");
      ShowZeroPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Digit Placeholder:");
      ShowDigitPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Decimal Point:");
      ShowDecimalPoint();
      Console.WriteLine();
      Console.WriteLine("Thousand Specifier:");
      ShowThousandSpecifier();
      Console.WriteLine();
      Console.WriteLine("Scaling Specifier:");
      ShowScalingSpecifier();
      Console.WriteLine();
      Console.WriteLine("Percentage Placeholder:");
      ShowPercentagePlaceholder();
      Console.WriteLine();
      Console.WriteLine("Scientific Notation:");
      ShowScientificNotation();
      Console.WriteLine();
      Console.WriteLine("Section Specifier:");
      ShowSectionSpecifier();
      Console.WriteLine();
      Console.WriteLine("Per Mille Placeholder:");
      ShowPerMillePlaceholder();
   }

   private static void ShowZeroPlaceholder()
   {
      // <Snippet1>
      double value;

      value = 123;
      Console.WriteLine(value.ToString("00000"));
      Console.WriteLine(String.Format("{0:00000}", value));
      // Displays 00123

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      CultureInfo daDK = CultureInfo.CreateSpecificCulture("da-DK");
      Console.WriteLine(value.ToString("00.00", daDK));
      Console.WriteLine(String.Format(daDK, "{0:00.00}", value));
      // Displays 01,20

      value = .56;
      Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.0}", value));
      // Displays 0.6

      value = 1234567890;
      Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0}", value));	
      // Displays 1,234,567,890

      CultureInfo elGR = CultureInfo.CreateSpecificCulture("el-GR");
      Console.WriteLine(value.ToString("0,0", elGR));	
     Console.WriteLine(String.Format(elGR, "{0:0,0}", value));	
      // Displays 1.234.567.890

      value = 1234567890.123456;
      Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.0}", value));	
      // Displays 1,234,567,890.1

      value = 1234.567890;
      Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.00}", value));	
      // Displays 1,234.57
      // </Snippet1>
   }

   private static void ShowDigitPlaceholder()
   {
      // <Snippet2>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#.##}", value));
      // Displays 1.2

      value = 123;
      Console.WriteLine(value.ToString("#####"));
      Console.WriteLine(String.Format("{0:#####}", value));
      // Displays 123

      value = 123456;
      Console.WriteLine(value.ToString("[##-##-##]"));
      Console.WriteLine(String.Format("{0:[##-##-##]}", value));
	   // Displays [12-34-56]

      value = 1234567890;
      Console.WriteLine(value.ToString("#"));
      Console.WriteLine(String.Format("{0:#}", value));
      // Displays 1234567890

      Console.WriteLine(value.ToString("(###) ###-####"));
      Console.WriteLine(String.Format("{0:(###) ###-####}", value));
      // Displays (123) 456-7890
      // </Snippet2>
   }

   private static void ShowDecimalPoint()
   {
      // <Snippet3>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      Console.WriteLine(value.ToString("00.00",
                        CultureInfo.CreateSpecificCulture("da-DK")));
      Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                        "{0:00.00}", value));
      // Displays 01,20

      value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%

      value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.###E+0}", value));
	   // Displays 8.6E+4
      // </Snippet3>
   }

   private static void ShowThousandSpecifier()
   {
      // <Snippet4>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,#}", value));
      // Displays 1,234,567,890

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
      // Displays 1,235      	
      // </Snippet4>
   }

   private static void ShowScalingSpecifier()
   {
      // <Snippet5>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,}", value));	
      // Displays 1235

      Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,,}", value));
	  // Displays 1

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
	  // Displays 1,235
      // </Snippet5>
   }

   private static void ShowPercentagePlaceholder()
   {
      // <Snippet6>
      double value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%
      // </Snippet6>
   }

   private static void ShowScientificNotation()
   {
      // <Snippet7>
      double value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+0}", value));
      // Displays 8.6E+4

      Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+000}", value));
      // Displays 8.6E+004

      Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E-000}", value));
      // Displays 8.6E004
      // </Snippet7>
   }

   private static void ShowSectionSpecifier()
   {
      // <Snippet8>
      double posValue = 1234;
      double negValue = -1234;
      double zeroValue = 0;

      string fmt2 = "##;(##)";
      string fmt3 = "##;(##);**Zero**";

      Console.WriteLine(posValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue));
      // Displays 1234

      Console.WriteLine(negValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue));
      // Displays (1234)

      Console.WriteLine(zeroValue.ToString(fmt3));
      Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue));
      // Displays **Zero**
      // </Snippet8>
   }

   private static void ShowPerMillePlaceholder()
   {
      // <Snippet9>
      double value = .00354;
      string perMilleFmt = "#0.## " + '\u2030';
      Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:" + perMilleFmt + "}", value));
      // Displays 3.54‰
      // </Snippet9>
   }
}

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/vb/Custom.vb4

vb
' Visual Basic .NET Document
Option Strict On

Imports System.Globalization

Module CustomNumericFormatting
    Public Sub Main()
        Console.WriteLine("Zero Placeholder:")
        ShowZeroPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Digit Placeholder:")
        ShowDigitPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Decimal Point:")
        ShowDecimalPoint()
        Console.WriteLine()
        Console.WriteLine("Thousand Specifier:")
        ShowThousandSpecifier()
        Console.WriteLine()
        Console.WriteLine("Scaling Specifier:")
        ShowScalingSpecifier()
        Console.WriteLine()
        Console.WriteLine("Percentage Placeholder:")
        ShowPercentagePlaceholder()
        Console.WriteLine()
        Console.WriteLine("Scientific Notation:")
        ShowScientificNotation()
        Console.WriteLine()
        Console.WriteLine("Section Specifier:")
        ShowSectionSpecifier()
        Console.WriteLine()
        Console.WriteLine("Per Mille Placeholder:")
        ShowPerMillePlaceholder()
    End Sub

    Private Sub ShowZeroPlaceHolder()
        ' <Snippet1>
        Dim value As Double

        value = 123
        Console.WriteLine(value.ToString("00000"))
        Console.WriteLine(String.Format("{0:00000}", value))
        ' Displays 00123

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.00}", value))
        ' Displays 1.20
        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20
        Dim daDK As CultureInfo = CultureInfo.CreateSpecificCulture("da-DK")
        Console.WriteLine(value.ToString("00.00", daDK))
        Console.WriteLine(String.Format(daDK, "{0:00.00}", value))
        ' Displays 01,20

        value = .56
        Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.0}", value))
        ' Displays 0.6

        value = 1234567890
        Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0}", value))
        ' Displays 1,234,567,890
        Dim elGR As CultureInfo = CultureInfo.CreateSpecificCulture("el-GR")
        Console.WriteLine(value.ToString("0,0", elGR))
        Console.WriteLine(String.Format(elGR, "{0:0,0}", value))
        ' Displays 1.234.567.890

        value = 1234567890.123456
        Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.0}", value))
        ' Displays 1,234,567,890.1

        value = 1234.567890
        Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.00}", value))
        ' Displays 1,234.57
        ' </Snippet1>
    End Sub

    Private Sub ShowDigitPlaceholder()
        ' <Snippet2>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#.##}", value))
        ' Displays 1.2

        value = 123
        Console.WriteLine(value.ToString("#####"))
        Console.WriteLine(String.Format("{0:#####}", value))
        ' Displays 123

        value = 123456
        Console.WriteLine(value.ToString("[##-##-##]"))
        Console.WriteLine(String.Format("{0:[##-##-##]}", value))
        ' Displays [12-34-56]

        value = 1234567890
        Console.WriteLine(value.ToString("#"))
        Console.WriteLine(String.Format("{0:#}", value))
        ' Displays 1234567890

        Console.WriteLine(value.ToString("(###) ###-####"))
        Console.WriteLine(String.Format("{0:(###) ###-####}", value))
        ' Displays (123) 456-7890
        ' </Snippet2>
    End Sub

    Private Sub ShowDecimalPoint()
        ' <Snippet3>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.00}", value))
        ' Displays 1.20

        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20

        Console.WriteLine(value.ToString("00.00", _
                          CultureInfo.CreateSpecificCulture("da-DK")))
        Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                          "{0:00.00}", value))
        ' Displays 01,20

        value = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%

        value = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.###E+0}", value))
        ' Displays 8.6E+4
        ' </Snippet3>
    End Sub

    Private Sub ShowThousandSpecifier
        ' <Snippet4>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,#}", value))
        ' Displays 1,234,567,890

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet4>
    End Sub

    Private Sub ShowScalingSpecifier
        ' <Snippet5>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0:#,,}", value))
        ' Displays 1235

        Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,,,}", value))
        ' Displays 1

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet5>
    End Sub

    Private Sub ShowPercentagePlaceholder()
        ' <Snippet6>
        Dim value As Double = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%
        ' </Snippet6>
    End Sub

    Private Sub ShowScientificNotation()
        ' <Snippet7>
        Dim value As Double = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+0}", value))
        ' Displays 8.6E+4

        Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+000}", value))
        ' Displays 8.6E+004

        Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E-000}", value))
        ' Displays 8.6E004
        ' </Snippet7>
    End Sub

    Private Sub ShowSectionSpecifier()
        ' <Snippet8>
        Dim posValue As Double = 1234
        Dim negValue As Double = -1234
        Dim zeroValue As Double = 0

        Dim fmt2 As String = "##;(##)"
        Dim fmt3 As String = "##;(##);**Zero**"

        Console.WriteLine(posValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue))
        ' Displays 1234

        Console.WriteLine(negValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue))
        ' Displays (1234)

        Console.WriteLine(zeroValue.ToString(fmt3))
        Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue))
        ' Displays **Zero**
        ' </Snippet8>
    End Sub

    Private Sub ShowPerMillePlaceholder()
        ' <Snippet9>
        Dim value As Double = .00354
        Dim perMilleFmt As String = "#0.## " & ChrW(&h2030)
        Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:" + perMilleFmt + "}", value))
        ' Displays 3.54 ‰
        ' </Snippet9>
    End Sub
End Module

The following example illustrates the use of the comma as a specifier for number scaling.

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/cs/custom.cs5

csharp
using System;
using System.Globalization;

public class CustomNumericFormatting
{
   public static void Main()
   {
      Console.WriteLine("Zero Placeholder:");
      ShowZeroPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Digit Placeholder:");
      ShowDigitPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Decimal Point:");
      ShowDecimalPoint();
      Console.WriteLine();
      Console.WriteLine("Thousand Specifier:");
      ShowThousandSpecifier();
      Console.WriteLine();
      Console.WriteLine("Scaling Specifier:");
      ShowScalingSpecifier();
      Console.WriteLine();
      Console.WriteLine("Percentage Placeholder:");
      ShowPercentagePlaceholder();
      Console.WriteLine();
      Console.WriteLine("Scientific Notation:");
      ShowScientificNotation();
      Console.WriteLine();
      Console.WriteLine("Section Specifier:");
      ShowSectionSpecifier();
      Console.WriteLine();
      Console.WriteLine("Per Mille Placeholder:");
      ShowPerMillePlaceholder();
   }

   private static void ShowZeroPlaceholder()
   {
      // <Snippet1>
      double value;

      value = 123;
      Console.WriteLine(value.ToString("00000"));
      Console.WriteLine(String.Format("{0:00000}", value));
      // Displays 00123

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      CultureInfo daDK = CultureInfo.CreateSpecificCulture("da-DK");
      Console.WriteLine(value.ToString("00.00", daDK));
      Console.WriteLine(String.Format(daDK, "{0:00.00}", value));
      // Displays 01,20

      value = .56;
      Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.0}", value));
      // Displays 0.6

      value = 1234567890;
      Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0}", value));	
      // Displays 1,234,567,890

      CultureInfo elGR = CultureInfo.CreateSpecificCulture("el-GR");
      Console.WriteLine(value.ToString("0,0", elGR));	
     Console.WriteLine(String.Format(elGR, "{0:0,0}", value));	
      // Displays 1.234.567.890

      value = 1234567890.123456;
      Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.0}", value));	
      // Displays 1,234,567,890.1

      value = 1234.567890;
      Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.00}", value));	
      // Displays 1,234.57
      // </Snippet1>
   }

   private static void ShowDigitPlaceholder()
   {
      // <Snippet2>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#.##}", value));
      // Displays 1.2

      value = 123;
      Console.WriteLine(value.ToString("#####"));
      Console.WriteLine(String.Format("{0:#####}", value));
      // Displays 123

      value = 123456;
      Console.WriteLine(value.ToString("[##-##-##]"));
      Console.WriteLine(String.Format("{0:[##-##-##]}", value));
	   // Displays [12-34-56]

      value = 1234567890;
      Console.WriteLine(value.ToString("#"));
      Console.WriteLine(String.Format("{0:#}", value));
      // Displays 1234567890

      Console.WriteLine(value.ToString("(###) ###-####"));
      Console.WriteLine(String.Format("{0:(###) ###-####}", value));
      // Displays (123) 456-7890
      // </Snippet2>
   }

   private static void ShowDecimalPoint()
   {
      // <Snippet3>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      Console.WriteLine(value.ToString("00.00",
                        CultureInfo.CreateSpecificCulture("da-DK")));
      Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                        "{0:00.00}", value));
      // Displays 01,20

      value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%

      value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.###E+0}", value));
	   // Displays 8.6E+4
      // </Snippet3>
   }

   private static void ShowThousandSpecifier()
   {
      // <Snippet4>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,#}", value));
      // Displays 1,234,567,890

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
      // Displays 1,235      	
      // </Snippet4>
   }

   private static void ShowScalingSpecifier()
   {
      // <Snippet5>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,}", value));	
      // Displays 1235

      Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,,}", value));
	  // Displays 1

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
	  // Displays 1,235
      // </Snippet5>
   }

   private static void ShowPercentagePlaceholder()
   {
      // <Snippet6>
      double value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%
      // </Snippet6>
   }

   private static void ShowScientificNotation()
   {
      // <Snippet7>
      double value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+0}", value));
      // Displays 8.6E+4

      Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+000}", value));
      // Displays 8.6E+004

      Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E-000}", value));
      // Displays 8.6E004
      // </Snippet7>
   }

   private static void ShowSectionSpecifier()
   {
      // <Snippet8>
      double posValue = 1234;
      double negValue = -1234;
      double zeroValue = 0;

      string fmt2 = "##;(##)";
      string fmt3 = "##;(##);**Zero**";

      Console.WriteLine(posValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue));
      // Displays 1234

      Console.WriteLine(negValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue));
      // Displays (1234)

      Console.WriteLine(zeroValue.ToString(fmt3));
      Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue));
      // Displays **Zero**
      // </Snippet8>
   }

   private static void ShowPerMillePlaceholder()
   {
      // <Snippet9>
      double value = .00354;
      string perMilleFmt = "#0.## " + '\u2030';
      Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:" + perMilleFmt + "}", value));
      // Displays 3.54‰
      // </Snippet9>
   }
}

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/vb/Custom.vb5

vb
' Visual Basic .NET Document
Option Strict On

Imports System.Globalization

Module CustomNumericFormatting
    Public Sub Main()
        Console.WriteLine("Zero Placeholder:")
        ShowZeroPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Digit Placeholder:")
        ShowDigitPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Decimal Point:")
        ShowDecimalPoint()
        Console.WriteLine()
        Console.WriteLine("Thousand Specifier:")
        ShowThousandSpecifier()
        Console.WriteLine()
        Console.WriteLine("Scaling Specifier:")
        ShowScalingSpecifier()
        Console.WriteLine()
        Console.WriteLine("Percentage Placeholder:")
        ShowPercentagePlaceholder()
        Console.WriteLine()
        Console.WriteLine("Scientific Notation:")
        ShowScientificNotation()
        Console.WriteLine()
        Console.WriteLine("Section Specifier:")
        ShowSectionSpecifier()
        Console.WriteLine()
        Console.WriteLine("Per Mille Placeholder:")
        ShowPerMillePlaceholder()
    End Sub

    Private Sub ShowZeroPlaceHolder()
        ' <Snippet1>
        Dim value As Double

        value = 123
        Console.WriteLine(value.ToString("00000"))
        Console.WriteLine(String.Format("{0:00000}", value))
        ' Displays 00123

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.00}", value))
        ' Displays 1.20
        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20
        Dim daDK As CultureInfo = CultureInfo.CreateSpecificCulture("da-DK")
        Console.WriteLine(value.ToString("00.00", daDK))
        Console.WriteLine(String.Format(daDK, "{0:00.00}", value))
        ' Displays 01,20

        value = .56
        Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.0}", value))
        ' Displays 0.6

        value = 1234567890
        Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0}", value))
        ' Displays 1,234,567,890
        Dim elGR As CultureInfo = CultureInfo.CreateSpecificCulture("el-GR")
        Console.WriteLine(value.ToString("0,0", elGR))
        Console.WriteLine(String.Format(elGR, "{0:0,0}", value))
        ' Displays 1.234.567.890

        value = 1234567890.123456
        Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.0}", value))
        ' Displays 1,234,567,890.1

        value = 1234.567890
        Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.00}", value))
        ' Displays 1,234.57
        ' </Snippet1>
    End Sub

    Private Sub ShowDigitPlaceholder()
        ' <Snippet2>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#.##}", value))
        ' Displays 1.2

        value = 123
        Console.WriteLine(value.ToString("#####"))
        Console.WriteLine(String.Format("{0:#####}", value))
        ' Displays 123

        value = 123456
        Console.WriteLine(value.ToString("[##-##-##]"))
        Console.WriteLine(String.Format("{0:[##-##-##]}", value))
        ' Displays [12-34-56]

        value = 1234567890
        Console.WriteLine(value.ToString("#"))
        Console.WriteLine(String.Format("{0:#}", value))
        ' Displays 1234567890

        Console.WriteLine(value.ToString("(###) ###-####"))
        Console.WriteLine(String.Format("{0:(###) ###-####}", value))
        ' Displays (123) 456-7890
        ' </Snippet2>
    End Sub

    Private Sub ShowDecimalPoint()
        ' <Snippet3>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.00}", value))
        ' Displays 1.20

        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20

        Console.WriteLine(value.ToString("00.00", _
                          CultureInfo.CreateSpecificCulture("da-DK")))
        Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                          "{0:00.00}", value))
        ' Displays 01,20

        value = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%

        value = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.###E+0}", value))
        ' Displays 8.6E+4
        ' </Snippet3>
    End Sub

    Private Sub ShowThousandSpecifier
        ' <Snippet4>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,#}", value))
        ' Displays 1,234,567,890

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet4>
    End Sub

    Private Sub ShowScalingSpecifier
        ' <Snippet5>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0:#,,}", value))
        ' Displays 1235

        Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,,,}", value))
        ' Displays 1

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet5>
    End Sub

    Private Sub ShowPercentagePlaceholder()
        ' <Snippet6>
        Dim value As Double = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%
        ' </Snippet6>
    End Sub

    Private Sub ShowScientificNotation()
        ' <Snippet7>
        Dim value As Double = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+0}", value))
        ' Displays 8.6E+4

        Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+000}", value))
        ' Displays 8.6E+004

        Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E-000}", value))
        ' Displays 8.6E004
        ' </Snippet7>
    End Sub

    Private Sub ShowSectionSpecifier()
        ' <Snippet8>
        Dim posValue As Double = 1234
        Dim negValue As Double = -1234
        Dim zeroValue As Double = 0

        Dim fmt2 As String = "##;(##)"
        Dim fmt3 As String = "##;(##);**Zero**"

        Console.WriteLine(posValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue))
        ' Displays 1234

        Console.WriteLine(negValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue))
        ' Displays (1234)

        Console.WriteLine(zeroValue.ToString(fmt3))
        Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue))
        ' Displays **Zero**
        ' </Snippet8>
    End Sub

    Private Sub ShowPerMillePlaceholder()
        ' <Snippet9>
        Dim value As Double = .00354
        Dim perMilleFmt As String = "#0.## " & ChrW(&h2030)
        Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:" + perMilleFmt + "}", value))
        ' Displays 3.54 ‰
        ' </Snippet9>
    End Sub
End Module

Back to table

The "%" custom specifier

A percent sign (%) in a format string causes a number to be multiplied by 100 before it is formatted. The localized percent symbol is inserted in the number at the location where the % appears in the format string. The percent character used is defined by the System.Globalization.NumberFormatInfo.PercentSymbol property of the current System.Globalization.NumberFormatInfo object.

The following example defines several custom format strings that include the "%" custom specifier.

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/cs/custom.cs6

csharp
using System;
using System.Globalization;

public class CustomNumericFormatting
{
   public static void Main()
   {
      Console.WriteLine("Zero Placeholder:");
      ShowZeroPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Digit Placeholder:");
      ShowDigitPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Decimal Point:");
      ShowDecimalPoint();
      Console.WriteLine();
      Console.WriteLine("Thousand Specifier:");
      ShowThousandSpecifier();
      Console.WriteLine();
      Console.WriteLine("Scaling Specifier:");
      ShowScalingSpecifier();
      Console.WriteLine();
      Console.WriteLine("Percentage Placeholder:");
      ShowPercentagePlaceholder();
      Console.WriteLine();
      Console.WriteLine("Scientific Notation:");
      ShowScientificNotation();
      Console.WriteLine();
      Console.WriteLine("Section Specifier:");
      ShowSectionSpecifier();
      Console.WriteLine();
      Console.WriteLine("Per Mille Placeholder:");
      ShowPerMillePlaceholder();
   }

   private static void ShowZeroPlaceholder()
   {
      // <Snippet1>
      double value;

      value = 123;
      Console.WriteLine(value.ToString("00000"));
      Console.WriteLine(String.Format("{0:00000}", value));
      // Displays 00123

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      CultureInfo daDK = CultureInfo.CreateSpecificCulture("da-DK");
      Console.WriteLine(value.ToString("00.00", daDK));
      Console.WriteLine(String.Format(daDK, "{0:00.00}", value));
      // Displays 01,20

      value = .56;
      Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.0}", value));
      // Displays 0.6

      value = 1234567890;
      Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0}", value));	
      // Displays 1,234,567,890

      CultureInfo elGR = CultureInfo.CreateSpecificCulture("el-GR");
      Console.WriteLine(value.ToString("0,0", elGR));	
     Console.WriteLine(String.Format(elGR, "{0:0,0}", value));	
      // Displays 1.234.567.890

      value = 1234567890.123456;
      Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.0}", value));	
      // Displays 1,234,567,890.1

      value = 1234.567890;
      Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.00}", value));	
      // Displays 1,234.57
      // </Snippet1>
   }

   private static void ShowDigitPlaceholder()
   {
      // <Snippet2>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#.##}", value));
      // Displays 1.2

      value = 123;
      Console.WriteLine(value.ToString("#####"));
      Console.WriteLine(String.Format("{0:#####}", value));
      // Displays 123

      value = 123456;
      Console.WriteLine(value.ToString("[##-##-##]"));
      Console.WriteLine(String.Format("{0:[##-##-##]}", value));
	   // Displays [12-34-56]

      value = 1234567890;
      Console.WriteLine(value.ToString("#"));
      Console.WriteLine(String.Format("{0:#}", value));
      // Displays 1234567890

      Console.WriteLine(value.ToString("(###) ###-####"));
      Console.WriteLine(String.Format("{0:(###) ###-####}", value));
      // Displays (123) 456-7890
      // </Snippet2>
   }

   private static void ShowDecimalPoint()
   {
      // <Snippet3>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      Console.WriteLine(value.ToString("00.00",
                        CultureInfo.CreateSpecificCulture("da-DK")));
      Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                        "{0:00.00}", value));
      // Displays 01,20

      value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%

      value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.###E+0}", value));
	   // Displays 8.6E+4
      // </Snippet3>
   }

   private static void ShowThousandSpecifier()
   {
      // <Snippet4>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,#}", value));
      // Displays 1,234,567,890

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
      // Displays 1,235      	
      // </Snippet4>
   }

   private static void ShowScalingSpecifier()
   {
      // <Snippet5>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,}", value));	
      // Displays 1235

      Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,,}", value));
	  // Displays 1

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
	  // Displays 1,235
      // </Snippet5>
   }

   private static void ShowPercentagePlaceholder()
   {
      // <Snippet6>
      double value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%
      // </Snippet6>
   }

   private static void ShowScientificNotation()
   {
      // <Snippet7>
      double value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+0}", value));
      // Displays 8.6E+4

      Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+000}", value));
      // Displays 8.6E+004

      Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E-000}", value));
      // Displays 8.6E004
      // </Snippet7>
   }

   private static void ShowSectionSpecifier()
   {
      // <Snippet8>
      double posValue = 1234;
      double negValue = -1234;
      double zeroValue = 0;

      string fmt2 = "##;(##)";
      string fmt3 = "##;(##);**Zero**";

      Console.WriteLine(posValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue));
      // Displays 1234

      Console.WriteLine(negValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue));
      // Displays (1234)

      Console.WriteLine(zeroValue.ToString(fmt3));
      Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue));
      // Displays **Zero**
      // </Snippet8>
   }

   private static void ShowPerMillePlaceholder()
   {
      // <Snippet9>
      double value = .00354;
      string perMilleFmt = "#0.## " + '\u2030';
      Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:" + perMilleFmt + "}", value));
      // Displays 3.54‰
      // </Snippet9>
   }
}

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/vb/Custom.vb6

vb
' Visual Basic .NET Document
Option Strict On

Imports System.Globalization

Module CustomNumericFormatting
    Public Sub Main()
        Console.WriteLine("Zero Placeholder:")
        ShowZeroPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Digit Placeholder:")
        ShowDigitPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Decimal Point:")
        ShowDecimalPoint()
        Console.WriteLine()
        Console.WriteLine("Thousand Specifier:")
        ShowThousandSpecifier()
        Console.WriteLine()
        Console.WriteLine("Scaling Specifier:")
        ShowScalingSpecifier()
        Console.WriteLine()
        Console.WriteLine("Percentage Placeholder:")
        ShowPercentagePlaceholder()
        Console.WriteLine()
        Console.WriteLine("Scientific Notation:")
        ShowScientificNotation()
        Console.WriteLine()
        Console.WriteLine("Section Specifier:")
        ShowSectionSpecifier()
        Console.WriteLine()
        Console.WriteLine("Per Mille Placeholder:")
        ShowPerMillePlaceholder()
    End Sub

    Private Sub ShowZeroPlaceHolder()
        ' <Snippet1>
        Dim value As Double

        value = 123
        Console.WriteLine(value.ToString("00000"))
        Console.WriteLine(String.Format("{0:00000}", value))
        ' Displays 00123

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.00}", value))
        ' Displays 1.20
        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20
        Dim daDK As CultureInfo = CultureInfo.CreateSpecificCulture("da-DK")
        Console.WriteLine(value.ToString("00.00", daDK))
        Console.WriteLine(String.Format(daDK, "{0:00.00}", value))
        ' Displays 01,20

        value = .56
        Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.0}", value))
        ' Displays 0.6

        value = 1234567890
        Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0}", value))
        ' Displays 1,234,567,890
        Dim elGR As CultureInfo = CultureInfo.CreateSpecificCulture("el-GR")
        Console.WriteLine(value.ToString("0,0", elGR))
        Console.WriteLine(String.Format(elGR, "{0:0,0}", value))
        ' Displays 1.234.567.890

        value = 1234567890.123456
        Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.0}", value))
        ' Displays 1,234,567,890.1

        value = 1234.567890
        Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.00}", value))
        ' Displays 1,234.57
        ' </Snippet1>
    End Sub

    Private Sub ShowDigitPlaceholder()
        ' <Snippet2>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#.##}", value))
        ' Displays 1.2

        value = 123
        Console.WriteLine(value.ToString("#####"))
        Console.WriteLine(String.Format("{0:#####}", value))
        ' Displays 123

        value = 123456
        Console.WriteLine(value.ToString("[##-##-##]"))
        Console.WriteLine(String.Format("{0:[##-##-##]}", value))
        ' Displays [12-34-56]

        value = 1234567890
        Console.WriteLine(value.ToString("#"))
        Console.WriteLine(String.Format("{0:#}", value))
        ' Displays 1234567890

        Console.WriteLine(value.ToString("(###) ###-####"))
        Console.WriteLine(String.Format("{0:(###) ###-####}", value))
        ' Displays (123) 456-7890
        ' </Snippet2>
    End Sub

    Private Sub ShowDecimalPoint()
        ' <Snippet3>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.00}", value))
        ' Displays 1.20

        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20

        Console.WriteLine(value.ToString("00.00", _
                          CultureInfo.CreateSpecificCulture("da-DK")))
        Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                          "{0:00.00}", value))
        ' Displays 01,20

        value = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%

        value = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.###E+0}", value))
        ' Displays 8.6E+4
        ' </Snippet3>
    End Sub

    Private Sub ShowThousandSpecifier
        ' <Snippet4>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,#}", value))
        ' Displays 1,234,567,890

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet4>
    End Sub

    Private Sub ShowScalingSpecifier
        ' <Snippet5>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0:#,,}", value))
        ' Displays 1235

        Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,,,}", value))
        ' Displays 1

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet5>
    End Sub

    Private Sub ShowPercentagePlaceholder()
        ' <Snippet6>
        Dim value As Double = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%
        ' </Snippet6>
    End Sub

    Private Sub ShowScientificNotation()
        ' <Snippet7>
        Dim value As Double = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+0}", value))
        ' Displays 8.6E+4

        Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+000}", value))
        ' Displays 8.6E+004

        Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E-000}", value))
        ' Displays 8.6E004
        ' </Snippet7>
    End Sub

    Private Sub ShowSectionSpecifier()
        ' <Snippet8>
        Dim posValue As Double = 1234
        Dim negValue As Double = -1234
        Dim zeroValue As Double = 0

        Dim fmt2 As String = "##;(##)"
        Dim fmt3 As String = "##;(##);**Zero**"

        Console.WriteLine(posValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue))
        ' Displays 1234

        Console.WriteLine(negValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue))
        ' Displays (1234)

        Console.WriteLine(zeroValue.ToString(fmt3))
        Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue))
        ' Displays **Zero**
        ' </Snippet8>
    End Sub

    Private Sub ShowPerMillePlaceholder()
        ' <Snippet9>
        Dim value As Double = .00354
        Dim perMilleFmt As String = "#0.## " & ChrW(&h2030)
        Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:" + perMilleFmt + "}", value))
        ' Displays 3.54 ‰
        ' </Snippet9>
    End Sub
End Module

Back to table

The "‰" custom specifier

A per mille character (‰ or \u2030) in a format string causes a number to be multiplied by 1000 before it is formatted. The appropriate per mille symbol is inserted in the returned string at the location where the ‰ symbol appears in the format string. The per mille character used is defined by the System.Globalization.NumberFormatInfo.PerMilleSymbol property of the object that provides culture-specific formatting information.

The following example defines a custom format string that includes the "‰" custom specifier.

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/cs/custom.cs9

csharp
using System;
using System.Globalization;

public class CustomNumericFormatting
{
   public static void Main()
   {
      Console.WriteLine("Zero Placeholder:");
      ShowZeroPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Digit Placeholder:");
      ShowDigitPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Decimal Point:");
      ShowDecimalPoint();
      Console.WriteLine();
      Console.WriteLine("Thousand Specifier:");
      ShowThousandSpecifier();
      Console.WriteLine();
      Console.WriteLine("Scaling Specifier:");
      ShowScalingSpecifier();
      Console.WriteLine();
      Console.WriteLine("Percentage Placeholder:");
      ShowPercentagePlaceholder();
      Console.WriteLine();
      Console.WriteLine("Scientific Notation:");
      ShowScientificNotation();
      Console.WriteLine();
      Console.WriteLine("Section Specifier:");
      ShowSectionSpecifier();
      Console.WriteLine();
      Console.WriteLine("Per Mille Placeholder:");
      ShowPerMillePlaceholder();
   }

   private static void ShowZeroPlaceholder()
   {
      // <Snippet1>
      double value;

      value = 123;
      Console.WriteLine(value.ToString("00000"));
      Console.WriteLine(String.Format("{0:00000}", value));
      // Displays 00123

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      CultureInfo daDK = CultureInfo.CreateSpecificCulture("da-DK");
      Console.WriteLine(value.ToString("00.00", daDK));
      Console.WriteLine(String.Format(daDK, "{0:00.00}", value));
      // Displays 01,20

      value = .56;
      Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.0}", value));
      // Displays 0.6

      value = 1234567890;
      Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0}", value));	
      // Displays 1,234,567,890

      CultureInfo elGR = CultureInfo.CreateSpecificCulture("el-GR");
      Console.WriteLine(value.ToString("0,0", elGR));	
     Console.WriteLine(String.Format(elGR, "{0:0,0}", value));	
      // Displays 1.234.567.890

      value = 1234567890.123456;
      Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.0}", value));	
      // Displays 1,234,567,890.1

      value = 1234.567890;
      Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.00}", value));	
      // Displays 1,234.57
      // </Snippet1>
   }

   private static void ShowDigitPlaceholder()
   {
      // <Snippet2>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#.##}", value));
      // Displays 1.2

      value = 123;
      Console.WriteLine(value.ToString("#####"));
      Console.WriteLine(String.Format("{0:#####}", value));
      // Displays 123

      value = 123456;
      Console.WriteLine(value.ToString("[##-##-##]"));
      Console.WriteLine(String.Format("{0:[##-##-##]}", value));
	   // Displays [12-34-56]

      value = 1234567890;
      Console.WriteLine(value.ToString("#"));
      Console.WriteLine(String.Format("{0:#}", value));
      // Displays 1234567890

      Console.WriteLine(value.ToString("(###) ###-####"));
      Console.WriteLine(String.Format("{0:(###) ###-####}", value));
      // Displays (123) 456-7890
      // </Snippet2>
   }

   private static void ShowDecimalPoint()
   {
      // <Snippet3>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      Console.WriteLine(value.ToString("00.00",
                        CultureInfo.CreateSpecificCulture("da-DK")));
      Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                        "{0:00.00}", value));
      // Displays 01,20

      value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%

      value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.###E+0}", value));
	   // Displays 8.6E+4
      // </Snippet3>
   }

   private static void ShowThousandSpecifier()
   {
      // <Snippet4>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,#}", value));
      // Displays 1,234,567,890

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
      // Displays 1,235      	
      // </Snippet4>
   }

   private static void ShowScalingSpecifier()
   {
      // <Snippet5>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,}", value));	
      // Displays 1235

      Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,,}", value));
	  // Displays 1

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
	  // Displays 1,235
      // </Snippet5>
   }

   private static void ShowPercentagePlaceholder()
   {
      // <Snippet6>
      double value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%
      // </Snippet6>
   }

   private static void ShowScientificNotation()
   {
      // <Snippet7>
      double value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+0}", value));
      // Displays 8.6E+4

      Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+000}", value));
      // Displays 8.6E+004

      Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E-000}", value));
      // Displays 8.6E004
      // </Snippet7>
   }

   private static void ShowSectionSpecifier()
   {
      // <Snippet8>
      double posValue = 1234;
      double negValue = -1234;
      double zeroValue = 0;

      string fmt2 = "##;(##)";
      string fmt3 = "##;(##);**Zero**";

      Console.WriteLine(posValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue));
      // Displays 1234

      Console.WriteLine(negValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue));
      // Displays (1234)

      Console.WriteLine(zeroValue.ToString(fmt3));
      Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue));
      // Displays **Zero**
      // </Snippet8>
   }

   private static void ShowPerMillePlaceholder()
   {
      // <Snippet9>
      double value = .00354;
      string perMilleFmt = "#0.## " + '\u2030';
      Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:" + perMilleFmt + "}", value));
      // Displays 3.54‰
      // </Snippet9>
   }
}

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/vb/Custom.vb9

vb
' Visual Basic .NET Document
Option Strict On

Imports System.Globalization

Module CustomNumericFormatting
    Public Sub Main()
        Console.WriteLine("Zero Placeholder:")
        ShowZeroPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Digit Placeholder:")
        ShowDigitPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Decimal Point:")
        ShowDecimalPoint()
        Console.WriteLine()
        Console.WriteLine("Thousand Specifier:")
        ShowThousandSpecifier()
        Console.WriteLine()
        Console.WriteLine("Scaling Specifier:")
        ShowScalingSpecifier()
        Console.WriteLine()
        Console.WriteLine("Percentage Placeholder:")
        ShowPercentagePlaceholder()
        Console.WriteLine()
        Console.WriteLine("Scientific Notation:")
        ShowScientificNotation()
        Console.WriteLine()
        Console.WriteLine("Section Specifier:")
        ShowSectionSpecifier()
        Console.WriteLine()
        Console.WriteLine("Per Mille Placeholder:")
        ShowPerMillePlaceholder()
    End Sub

    Private Sub ShowZeroPlaceHolder()
        ' <Snippet1>
        Dim value As Double

        value = 123
        Console.WriteLine(value.ToString("00000"))
        Console.WriteLine(String.Format("{0:00000}", value))
        ' Displays 00123

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.00}", value))
        ' Displays 1.20
        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20
        Dim daDK As CultureInfo = CultureInfo.CreateSpecificCulture("da-DK")
        Console.WriteLine(value.ToString("00.00", daDK))
        Console.WriteLine(String.Format(daDK, "{0:00.00}", value))
        ' Displays 01,20

        value = .56
        Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.0}", value))
        ' Displays 0.6

        value = 1234567890
        Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0}", value))
        ' Displays 1,234,567,890
        Dim elGR As CultureInfo = CultureInfo.CreateSpecificCulture("el-GR")
        Console.WriteLine(value.ToString("0,0", elGR))
        Console.WriteLine(String.Format(elGR, "{0:0,0}", value))
        ' Displays 1.234.567.890

        value = 1234567890.123456
        Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.0}", value))
        ' Displays 1,234,567,890.1

        value = 1234.567890
        Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.00}", value))
        ' Displays 1,234.57
        ' </Snippet1>
    End Sub

    Private Sub ShowDigitPlaceholder()
        ' <Snippet2>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#.##}", value))
        ' Displays 1.2

        value = 123
        Console.WriteLine(value.ToString("#####"))
        Console.WriteLine(String.Format("{0:#####}", value))
        ' Displays 123

        value = 123456
        Console.WriteLine(value.ToString("[##-##-##]"))
        Console.WriteLine(String.Format("{0:[##-##-##]}", value))
        ' Displays [12-34-56]

        value = 1234567890
        Console.WriteLine(value.ToString("#"))
        Console.WriteLine(String.Format("{0:#}", value))
        ' Displays 1234567890

        Console.WriteLine(value.ToString("(###) ###-####"))
        Console.WriteLine(String.Format("{0:(###) ###-####}", value))
        ' Displays (123) 456-7890
        ' </Snippet2>
    End Sub

    Private Sub ShowDecimalPoint()
        ' <Snippet3>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.00}", value))
        ' Displays 1.20

        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20

        Console.WriteLine(value.ToString("00.00", _
                          CultureInfo.CreateSpecificCulture("da-DK")))
        Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                          "{0:00.00}", value))
        ' Displays 01,20

        value = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%

        value = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.###E+0}", value))
        ' Displays 8.6E+4
        ' </Snippet3>
    End Sub

    Private Sub ShowThousandSpecifier
        ' <Snippet4>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,#}", value))
        ' Displays 1,234,567,890

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet4>
    End Sub

    Private Sub ShowScalingSpecifier
        ' <Snippet5>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0:#,,}", value))
        ' Displays 1235

        Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,,,}", value))
        ' Displays 1

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet5>
    End Sub

    Private Sub ShowPercentagePlaceholder()
        ' <Snippet6>
        Dim value As Double = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%
        ' </Snippet6>
    End Sub

    Private Sub ShowScientificNotation()
        ' <Snippet7>
        Dim value As Double = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+0}", value))
        ' Displays 8.6E+4

        Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+000}", value))
        ' Displays 8.6E+004

        Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E-000}", value))
        ' Displays 8.6E004
        ' </Snippet7>
    End Sub

    Private Sub ShowSectionSpecifier()
        ' <Snippet8>
        Dim posValue As Double = 1234
        Dim negValue As Double = -1234
        Dim zeroValue As Double = 0

        Dim fmt2 As String = "##;(##)"
        Dim fmt3 As String = "##;(##);**Zero**"

        Console.WriteLine(posValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue))
        ' Displays 1234

        Console.WriteLine(negValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue))
        ' Displays (1234)

        Console.WriteLine(zeroValue.ToString(fmt3))
        Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue))
        ' Displays **Zero**
        ' </Snippet8>
    End Sub

    Private Sub ShowPerMillePlaceholder()
        ' <Snippet9>
        Dim value As Double = .00354
        Dim perMilleFmt As String = "#0.## " & ChrW(&h2030)
        Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:" + perMilleFmt + "}", value))
        ' Displays 3.54 ‰
        ' </Snippet9>
    End Sub
End Module

Back to table

The "E" and "e" custom specifiers

If any of the strings "E", "E+", "E-", "e", "e+", or "e-" are present in the format string and are followed immediately by at least one zero, the number is formatted by using scientific notation with an "E" or "e" inserted between the number and the exponent. The number of zeros following the scientific notation indicator determines the minimum number of digits to output for the exponent. The "E+" and "e+" formats indicate that a plus sign or minus sign should always precede the exponent. The "E", "E-", "e", or "e-" formats indicate that a sign character should precede only negative exponents.

The following example formats several numeric values using the specifiers for scientific notation.

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/cs/custom.cs7

csharp
using System;
using System.Globalization;

public class CustomNumericFormatting
{
   public static void Main()
   {
      Console.WriteLine("Zero Placeholder:");
      ShowZeroPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Digit Placeholder:");
      ShowDigitPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Decimal Point:");
      ShowDecimalPoint();
      Console.WriteLine();
      Console.WriteLine("Thousand Specifier:");
      ShowThousandSpecifier();
      Console.WriteLine();
      Console.WriteLine("Scaling Specifier:");
      ShowScalingSpecifier();
      Console.WriteLine();
      Console.WriteLine("Percentage Placeholder:");
      ShowPercentagePlaceholder();
      Console.WriteLine();
      Console.WriteLine("Scientific Notation:");
      ShowScientificNotation();
      Console.WriteLine();
      Console.WriteLine("Section Specifier:");
      ShowSectionSpecifier();
      Console.WriteLine();
      Console.WriteLine("Per Mille Placeholder:");
      ShowPerMillePlaceholder();
   }

   private static void ShowZeroPlaceholder()
   {
      // <Snippet1>
      double value;

      value = 123;
      Console.WriteLine(value.ToString("00000"));
      Console.WriteLine(String.Format("{0:00000}", value));
      // Displays 00123

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      CultureInfo daDK = CultureInfo.CreateSpecificCulture("da-DK");
      Console.WriteLine(value.ToString("00.00", daDK));
      Console.WriteLine(String.Format(daDK, "{0:00.00}", value));
      // Displays 01,20

      value = .56;
      Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.0}", value));
      // Displays 0.6

      value = 1234567890;
      Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0}", value));	
      // Displays 1,234,567,890

      CultureInfo elGR = CultureInfo.CreateSpecificCulture("el-GR");
      Console.WriteLine(value.ToString("0,0", elGR));	
     Console.WriteLine(String.Format(elGR, "{0:0,0}", value));	
      // Displays 1.234.567.890

      value = 1234567890.123456;
      Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.0}", value));	
      // Displays 1,234,567,890.1

      value = 1234.567890;
      Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.00}", value));	
      // Displays 1,234.57
      // </Snippet1>
   }

   private static void ShowDigitPlaceholder()
   {
      // <Snippet2>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#.##}", value));
      // Displays 1.2

      value = 123;
      Console.WriteLine(value.ToString("#####"));
      Console.WriteLine(String.Format("{0:#####}", value));
      // Displays 123

      value = 123456;
      Console.WriteLine(value.ToString("[##-##-##]"));
      Console.WriteLine(String.Format("{0:[##-##-##]}", value));
	   // Displays [12-34-56]

      value = 1234567890;
      Console.WriteLine(value.ToString("#"));
      Console.WriteLine(String.Format("{0:#}", value));
      // Displays 1234567890

      Console.WriteLine(value.ToString("(###) ###-####"));
      Console.WriteLine(String.Format("{0:(###) ###-####}", value));
      // Displays (123) 456-7890
      // </Snippet2>
   }

   private static void ShowDecimalPoint()
   {
      // <Snippet3>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      Console.WriteLine(value.ToString("00.00",
                        CultureInfo.CreateSpecificCulture("da-DK")));
      Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                        "{0:00.00}", value));
      // Displays 01,20

      value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%

      value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.###E+0}", value));
	   // Displays 8.6E+4
      // </Snippet3>
   }

   private static void ShowThousandSpecifier()
   {
      // <Snippet4>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,#}", value));
      // Displays 1,234,567,890

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
      // Displays 1,235      	
      // </Snippet4>
   }

   private static void ShowScalingSpecifier()
   {
      // <Snippet5>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,}", value));	
      // Displays 1235

      Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,,}", value));
	  // Displays 1

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
	  // Displays 1,235
      // </Snippet5>
   }

   private static void ShowPercentagePlaceholder()
   {
      // <Snippet6>
      double value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%
      // </Snippet6>
   }

   private static void ShowScientificNotation()
   {
      // <Snippet7>
      double value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+0}", value));
      // Displays 8.6E+4

      Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+000}", value));
      // Displays 8.6E+004

      Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E-000}", value));
      // Displays 8.6E004
      // </Snippet7>
   }

   private static void ShowSectionSpecifier()
   {
      // <Snippet8>
      double posValue = 1234;
      double negValue = -1234;
      double zeroValue = 0;

      string fmt2 = "##;(##)";
      string fmt3 = "##;(##);**Zero**";

      Console.WriteLine(posValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue));
      // Displays 1234

      Console.WriteLine(negValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue));
      // Displays (1234)

      Console.WriteLine(zeroValue.ToString(fmt3));
      Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue));
      // Displays **Zero**
      // </Snippet8>
   }

   private static void ShowPerMillePlaceholder()
   {
      // <Snippet9>
      double value = .00354;
      string perMilleFmt = "#0.## " + '\u2030';
      Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:" + perMilleFmt + "}", value));
      // Displays 3.54‰
      // </Snippet9>
   }
}

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/vb/Custom.vb7

vb
' Visual Basic .NET Document
Option Strict On

Imports System.Globalization

Module CustomNumericFormatting
    Public Sub Main()
        Console.WriteLine("Zero Placeholder:")
        ShowZeroPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Digit Placeholder:")
        ShowDigitPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Decimal Point:")
        ShowDecimalPoint()
        Console.WriteLine()
        Console.WriteLine("Thousand Specifier:")
        ShowThousandSpecifier()
        Console.WriteLine()
        Console.WriteLine("Scaling Specifier:")
        ShowScalingSpecifier()
        Console.WriteLine()
        Console.WriteLine("Percentage Placeholder:")
        ShowPercentagePlaceholder()
        Console.WriteLine()
        Console.WriteLine("Scientific Notation:")
        ShowScientificNotation()
        Console.WriteLine()
        Console.WriteLine("Section Specifier:")
        ShowSectionSpecifier()
        Console.WriteLine()
        Console.WriteLine("Per Mille Placeholder:")
        ShowPerMillePlaceholder()
    End Sub

    Private Sub ShowZeroPlaceHolder()
        ' <Snippet1>
        Dim value As Double

        value = 123
        Console.WriteLine(value.ToString("00000"))
        Console.WriteLine(String.Format("{0:00000}", value))
        ' Displays 00123

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.00}", value))
        ' Displays 1.20
        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20
        Dim daDK As CultureInfo = CultureInfo.CreateSpecificCulture("da-DK")
        Console.WriteLine(value.ToString("00.00", daDK))
        Console.WriteLine(String.Format(daDK, "{0:00.00}", value))
        ' Displays 01,20

        value = .56
        Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.0}", value))
        ' Displays 0.6

        value = 1234567890
        Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0}", value))
        ' Displays 1,234,567,890
        Dim elGR As CultureInfo = CultureInfo.CreateSpecificCulture("el-GR")
        Console.WriteLine(value.ToString("0,0", elGR))
        Console.WriteLine(String.Format(elGR, "{0:0,0}", value))
        ' Displays 1.234.567.890

        value = 1234567890.123456
        Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.0}", value))
        ' Displays 1,234,567,890.1

        value = 1234.567890
        Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.00}", value))
        ' Displays 1,234.57
        ' </Snippet1>
    End Sub

    Private Sub ShowDigitPlaceholder()
        ' <Snippet2>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#.##}", value))
        ' Displays 1.2

        value = 123
        Console.WriteLine(value.ToString("#####"))
        Console.WriteLine(String.Format("{0:#####}", value))
        ' Displays 123

        value = 123456
        Console.WriteLine(value.ToString("[##-##-##]"))
        Console.WriteLine(String.Format("{0:[##-##-##]}", value))
        ' Displays [12-34-56]

        value = 1234567890
        Console.WriteLine(value.ToString("#"))
        Console.WriteLine(String.Format("{0:#}", value))
        ' Displays 1234567890

        Console.WriteLine(value.ToString("(###) ###-####"))
        Console.WriteLine(String.Format("{0:(###) ###-####}", value))
        ' Displays (123) 456-7890
        ' </Snippet2>
    End Sub

    Private Sub ShowDecimalPoint()
        ' <Snippet3>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.00}", value))
        ' Displays 1.20

        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20

        Console.WriteLine(value.ToString("00.00", _
                          CultureInfo.CreateSpecificCulture("da-DK")))
        Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                          "{0:00.00}", value))
        ' Displays 01,20

        value = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%

        value = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.###E+0}", value))
        ' Displays 8.6E+4
        ' </Snippet3>
    End Sub

    Private Sub ShowThousandSpecifier
        ' <Snippet4>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,#}", value))
        ' Displays 1,234,567,890

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet4>
    End Sub

    Private Sub ShowScalingSpecifier
        ' <Snippet5>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0:#,,}", value))
        ' Displays 1235

        Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,,,}", value))
        ' Displays 1

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet5>
    End Sub

    Private Sub ShowPercentagePlaceholder()
        ' <Snippet6>
        Dim value As Double = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%
        ' </Snippet6>
    End Sub

    Private Sub ShowScientificNotation()
        ' <Snippet7>
        Dim value As Double = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+0}", value))
        ' Displays 8.6E+4

        Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+000}", value))
        ' Displays 8.6E+004

        Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E-000}", value))
        ' Displays 8.6E004
        ' </Snippet7>
    End Sub

    Private Sub ShowSectionSpecifier()
        ' <Snippet8>
        Dim posValue As Double = 1234
        Dim negValue As Double = -1234
        Dim zeroValue As Double = 0

        Dim fmt2 As String = "##;(##)"
        Dim fmt3 As String = "##;(##);**Zero**"

        Console.WriteLine(posValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue))
        ' Displays 1234

        Console.WriteLine(negValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue))
        ' Displays (1234)

        Console.WriteLine(zeroValue.ToString(fmt3))
        Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue))
        ' Displays **Zero**
        ' </Snippet8>
    End Sub

    Private Sub ShowPerMillePlaceholder()
        ' <Snippet9>
        Dim value As Double = .00354
        Dim perMilleFmt As String = "#0.## " & ChrW(&h2030)
        Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:" + perMilleFmt + "}", value))
        ' Displays 3.54 ‰
        ' </Snippet9>
    End Sub
End Module

Back to table

The "\" escape character

The "#", "0", ".", ",", "%", and "‰" symbols in a format string are interpreted as format specifiers rather than as literal characters. Depending on their position in a custom format string, the uppercase and lowercase "E" as well as the + and - symbols may also be interpreted as format specifiers.

To prevent a character from being interpreted as a format specifier, you can precede it with a backslash, which is the escape character. The escape character signifies that the following character is a character literal that should be included in the result string unchanged.

To include a backslash in a result string, you must escape it with another backslash (\\).

The following example uses the escape character to prevent the formatting operation from interpreting the "#", "0", and "\" characters as either escape characters or format specifiers. The C# examples uses an additional backslash to ensure that a backslash is interpreted as a literal character.

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/cs/escape1.cs11

csharp
using System;

public class Escape
{
   public static void Main()
   {
      // <Snippet11>
      int value = 123;
      Console.WriteLine(value.ToString("\\#\\#\\# ##0 dollars and \\0\\0 cents \\#\\#\\#"));
      Console.WriteLine(String.Format("{0:\\#\\#\\# ##0 dollars and \\0\\0 cents \\#\\#\\#}",
                                      value));
      // Displays ### 123 dollars and 00 cents ###

      Console.WriteLine(value.ToString(@"\#\#\# ##0 dollars and \0\0 cents \#\#\#"));
      Console.WriteLine(String.Format(@"{0:\#\#\# ##0 dollars and \0\0 cents \#\#\#}",
                                      value));
      // Displays ### 123 dollars and 00 cents ###

      Console.WriteLine(value.ToString("\\\\\\\\\\\\ ##0 dollars and \\0\\0 cents \\\\\\\\\\\\"));
      Console.WriteLine(String.Format("{0:\\\\\\\\\\\\ ##0 dollars and \\0\\0 cents \\\\\\\\\\\\}",
                                      value));
      // Displays \\\ 123 dollars and 00 cents \\\

      Console.WriteLine(value.ToString(@"\\\\\\ ##0 dollars and \0\0 cents \\\\\\"));
      Console.WriteLine(String.Format(@"{0:\\\\\\ ##0 dollars and \0\0 cents \\\\\\}",
                                      value));
      // Displays \\\ 123 dollars and 00 cents \\\
      // </Snippet11>
   }
}

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/vb/escape1.vb11

vb
' Visual Basic .NET Document
Option Strict On

Module Example
    Public Sub Main()
        ' <Snippet11>
        Dim value As Integer = 123
        Console.WriteLine(value.ToString("\#\#\# ##0 dollars and \0\0 cents \#\#\#"))
        Console.WriteLine(String.Format("{0:\#\#\# ##0 dollars and \0\0 cents \#\#\#}",
                                        value))
        ' Displays ### 123 dollars and 00 cents ###

        Console.WriteLine(value.ToString("\\\\\\ ##0 dollars and \0\0 cents \\\\\\"))
        Console.WriteLine(String.Format("{0:\\\\\\ ##0 dollars and \0\0 cents \\\\\\}",
                                        value))
        ' Displays \\\ 123 dollars and 00 cents \\\
        ' </Snippet11>
    End Sub
End Module

Back to table

The ";" section separator

The semicolon (;) is a conditional format specifier that applies different formatting to a number depending on whether its value is positive, negative, or zero. To produce this behavior, a custom format string can contain up to three sections separated by semicolons. These sections are described in the following table.

Number of sections Description
One section The format string applies to all values.
Two sections The first section applies to positive values and zeros, and the second section applies to negative values.

If the number to be formatted is negative, but becomes zero after rounding according to the format in the second section, the resulting zero is formatted according to the first section.
Three sections The first section applies to positive values, the second section applies to negative values, and the third section applies to zeros.

The second section can be left empty (by having nothing between the semicolons), in which case the first section applies to all nonzero values.

If the number to be formatted is nonzero, but becomes zero after rounding according to the format in the first or second section, the resulting zero is formatted according to the third section.

Section separators ignore any preexisting formatting associated with a number when the final value is formatted. For example, negative values are always displayed without a minus sign when section separators are used. If you want the final formatted value to have a minus sign, you should explicitly include the minus sign as part of the custom format specifier.

The following example uses the ";" format specifier to format positive, negative, and zero numbers differently.

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/cs/custom.cs8

csharp
using System;
using System.Globalization;

public class CustomNumericFormatting
{
   public static void Main()
   {
      Console.WriteLine("Zero Placeholder:");
      ShowZeroPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Digit Placeholder:");
      ShowDigitPlaceholder();
      Console.WriteLine();
      Console.WriteLine("Decimal Point:");
      ShowDecimalPoint();
      Console.WriteLine();
      Console.WriteLine("Thousand Specifier:");
      ShowThousandSpecifier();
      Console.WriteLine();
      Console.WriteLine("Scaling Specifier:");
      ShowScalingSpecifier();
      Console.WriteLine();
      Console.WriteLine("Percentage Placeholder:");
      ShowPercentagePlaceholder();
      Console.WriteLine();
      Console.WriteLine("Scientific Notation:");
      ShowScientificNotation();
      Console.WriteLine();
      Console.WriteLine("Section Specifier:");
      ShowSectionSpecifier();
      Console.WriteLine();
      Console.WriteLine("Per Mille Placeholder:");
      ShowPerMillePlaceholder();
   }

   private static void ShowZeroPlaceholder()
   {
      // <Snippet1>
      double value;

      value = 123;
      Console.WriteLine(value.ToString("00000"));
      Console.WriteLine(String.Format("{0:00000}", value));
      // Displays 00123

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      CultureInfo daDK = CultureInfo.CreateSpecificCulture("da-DK");
      Console.WriteLine(value.ToString("00.00", daDK));
      Console.WriteLine(String.Format(daDK, "{0:00.00}", value));
      // Displays 01,20

      value = .56;
      Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.0}", value));
      // Displays 0.6

      value = 1234567890;
      Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0}", value));	
      // Displays 1,234,567,890

      CultureInfo elGR = CultureInfo.CreateSpecificCulture("el-GR");
      Console.WriteLine(value.ToString("0,0", elGR));	
     Console.WriteLine(String.Format(elGR, "{0:0,0}", value));	
      // Displays 1.234.567.890

      value = 1234567890.123456;
      Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.0}", value));	
      // Displays 1,234,567,890.1

      value = 1234.567890;
      Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0,0.00}", value));	
      // Displays 1,234.57
      // </Snippet1>
   }

   private static void ShowDigitPlaceholder()
   {
      // <Snippet2>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#.##}", value));
      // Displays 1.2

      value = 123;
      Console.WriteLine(value.ToString("#####"));
      Console.WriteLine(String.Format("{0:#####}", value));
      // Displays 123

      value = 123456;
      Console.WriteLine(value.ToString("[##-##-##]"));
      Console.WriteLine(String.Format("{0:[##-##-##]}", value));
	   // Displays [12-34-56]

      value = 1234567890;
      Console.WriteLine(value.ToString("#"));
      Console.WriteLine(String.Format("{0:#}", value));
      // Displays 1234567890

      Console.WriteLine(value.ToString("(###) ###-####"));
      Console.WriteLine(String.Format("{0:(###) ###-####}", value));
      // Displays (123) 456-7890
      // </Snippet2>
   }

   private static void ShowDecimalPoint()
   {
      // <Snippet3>
      double value;

      value = 1.2;
      Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.00}", value));
      // Displays 1.20

      Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:00.00}", value));
      // Displays 01.20

      Console.WriteLine(value.ToString("00.00",
                        CultureInfo.CreateSpecificCulture("da-DK")));
      Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                        "{0:00.00}", value));
      // Displays 01,20

      value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%

      value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                        "{0:0.###E+0}", value));
	   // Displays 8.6E+4
      // </Snippet3>
   }

   private static void ShowThousandSpecifier()
   {
      // <Snippet4>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,#}", value));
      // Displays 1,234,567,890

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
      // Displays 1,235      	
      // </Snippet4>
   }

   private static void ShowScalingSpecifier()
   {
      // <Snippet5>
      double value = 1234567890;
      Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture));	
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,}", value));	
      // Displays 1235

      Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,,,}", value));
	  // Displays 1

      Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#,##0,,}", value));
	  // Displays 1,235
      // </Snippet5>
   }

   private static void ShowPercentagePlaceholder()
   {
      // <Snippet6>
      double value = .086;
      Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:#0.##%}", value));
      // Displays 8.6%
      // </Snippet6>
   }

   private static void ShowScientificNotation()
   {
      // <Snippet7>
      double value = 86000;
      Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+0}", value));
      // Displays 8.6E+4

      Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E+000}", value));
      // Displays 8.6E+004

      Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:0.###E-000}", value));
      // Displays 8.6E004
      // </Snippet7>
   }

   private static void ShowSectionSpecifier()
   {
      // <Snippet8>
      double posValue = 1234;
      double negValue = -1234;
      double zeroValue = 0;

      string fmt2 = "##;(##)";
      string fmt3 = "##;(##);**Zero**";

      Console.WriteLine(posValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue));
      // Displays 1234

      Console.WriteLine(negValue.ToString(fmt2));
      Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue));
      // Displays (1234)

      Console.WriteLine(zeroValue.ToString(fmt3));
      Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue));
      // Displays **Zero**
      // </Snippet8>
   }

   private static void ShowPerMillePlaceholder()
   {
      // <Snippet9>
      double value = .00354;
      string perMilleFmt = "#0.## " + '\u2030';
      Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture));
      Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                      "{0:" + perMilleFmt + "}", value));
      // Displays 3.54‰
      // </Snippet9>
   }
}

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/vb/Custom.vb8

vb
' Visual Basic .NET Document
Option Strict On

Imports System.Globalization

Module CustomNumericFormatting
    Public Sub Main()
        Console.WriteLine("Zero Placeholder:")
        ShowZeroPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Digit Placeholder:")
        ShowDigitPlaceholder()
        Console.WriteLine()
        Console.WriteLine("Decimal Point:")
        ShowDecimalPoint()
        Console.WriteLine()
        Console.WriteLine("Thousand Specifier:")
        ShowThousandSpecifier()
        Console.WriteLine()
        Console.WriteLine("Scaling Specifier:")
        ShowScalingSpecifier()
        Console.WriteLine()
        Console.WriteLine("Percentage Placeholder:")
        ShowPercentagePlaceholder()
        Console.WriteLine()
        Console.WriteLine("Scientific Notation:")
        ShowScientificNotation()
        Console.WriteLine()
        Console.WriteLine("Section Specifier:")
        ShowSectionSpecifier()
        Console.WriteLine()
        Console.WriteLine("Per Mille Placeholder:")
        ShowPerMillePlaceholder()
    End Sub

    Private Sub ShowZeroPlaceHolder()
        ' <Snippet1>
        Dim value As Double

        value = 123
        Console.WriteLine(value.ToString("00000"))
        Console.WriteLine(String.Format("{0:00000}", value))
        ' Displays 00123

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.00}", value))
        ' Displays 1.20
        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20
        Dim daDK As CultureInfo = CultureInfo.CreateSpecificCulture("da-DK")
        Console.WriteLine(value.ToString("00.00", daDK))
        Console.WriteLine(String.Format(daDK, "{0:00.00}", value))
        ' Displays 01,20

        value = .56
        Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.0}", value))
        ' Displays 0.6

        value = 1234567890
        Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0}", value))
        ' Displays 1,234,567,890
        Dim elGR As CultureInfo = CultureInfo.CreateSpecificCulture("el-GR")
        Console.WriteLine(value.ToString("0,0", elGR))
        Console.WriteLine(String.Format(elGR, "{0:0,0}", value))
        ' Displays 1.234.567.890

        value = 1234567890.123456
        Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.0}", value))
        ' Displays 1,234,567,890.1

        value = 1234.567890
        Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0,0.00}", value))
        ' Displays 1,234.57
        ' </Snippet1>
    End Sub

    Private Sub ShowDigitPlaceholder()
        ' <Snippet2>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#.##}", value))
        ' Displays 1.2

        value = 123
        Console.WriteLine(value.ToString("#####"))
        Console.WriteLine(String.Format("{0:#####}", value))
        ' Displays 123

        value = 123456
        Console.WriteLine(value.ToString("[##-##-##]"))
        Console.WriteLine(String.Format("{0:[##-##-##]}", value))
        ' Displays [12-34-56]

        value = 1234567890
        Console.WriteLine(value.ToString("#"))
        Console.WriteLine(String.Format("{0:#}", value))
        ' Displays 1234567890

        Console.WriteLine(value.ToString("(###) ###-####"))
        Console.WriteLine(String.Format("{0:(###) ###-####}", value))
        ' Displays (123) 456-7890
        ' </Snippet2>
    End Sub

    Private Sub ShowDecimalPoint()
        ' <Snippet3>
        Dim value As Double

        value = 1.2
        Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.00}", value))
        ' Displays 1.20

        Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:00.00}", value))
        ' Displays 01.20

        Console.WriteLine(value.ToString("00.00", _
                          CultureInfo.CreateSpecificCulture("da-DK")))
        Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                          "{0:00.00}", value))
        ' Displays 01,20

        value = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%

        value = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                          "{0:0.###E+0}", value))
        ' Displays 8.6E+4
        ' </Snippet3>
    End Sub

    Private Sub ShowThousandSpecifier
        ' <Snippet4>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,#}", value))
        ' Displays 1,234,567,890

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet4>
    End Sub

    Private Sub ShowScalingSpecifier
        ' <Snippet5>
        Dim value As Double = 1234567890
        Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0:#,,}", value))
        ' Displays 1235

        Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,,,}", value))
        ' Displays 1

        Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#,##0,,}", value))
        ' Displays 1,235
        ' </Snippet5>
    End Sub

    Private Sub ShowPercentagePlaceholder()
        ' <Snippet6>
        Dim value As Double = .086
        Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:#0.##%}", value))
        ' Displays 8.6%
        ' </Snippet6>
    End Sub

    Private Sub ShowScientificNotation()
        ' <Snippet7>
        Dim value As Double = 86000
        Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+0}", value))
        ' Displays 8.6E+4

        Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E+000}", value))
        ' Displays 8.6E+004

        Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:0.###E-000}", value))
        ' Displays 8.6E004
        ' </Snippet7>
    End Sub

    Private Sub ShowSectionSpecifier()
        ' <Snippet8>
        Dim posValue As Double = 1234
        Dim negValue As Double = -1234
        Dim zeroValue As Double = 0

        Dim fmt2 As String = "##;(##)"
        Dim fmt3 As String = "##;(##);**Zero**"

        Console.WriteLine(posValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue))
        ' Displays 1234

        Console.WriteLine(negValue.ToString(fmt2))
        Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue))
        ' Displays (1234)

        Console.WriteLine(zeroValue.ToString(fmt3))
        Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue))
        ' Displays **Zero**
        ' </Snippet8>
    End Sub

    Private Sub ShowPerMillePlaceholder()
        ' <Snippet9>
        Dim value As Double = .00354
        Dim perMilleFmt As String = "#0.## " & ChrW(&h2030)
        Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture))
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                        "{0:" + perMilleFmt + "}", value))
        ' Displays 3.54 ‰
        ' </Snippet9>
    End Sub
End Module

Back to table

Character literals

Format specifiers that appear in a custom numeric format string are always interpreted as formatting characters and never as literal characters. This includes the following characters:

  • 0
  • #
  • %
  • ‰
  • '
  • \
  • .
  • ,
  • E or e, depending on its position in the format string.

All other characters are always interpreted as character literals and, in a formatting operation, are included in the result string unchanged. In a parsing operation, they must match the characters in the input string exactly; the comparison is case-sensitive.

The following example illustrates one common use of literal character units (in this case, thousands):

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/literal2.cs1

csharp
using System;

public class Example
{
   public static void Main()
   {
      // <Snippet1>
      double n = 123.8;
      Console.WriteLine($"{n:#,##0.0K}");
      // The example displays the following output:
      //      123.8K
      // </Snippet1>
   }
}

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/literal2.vb1

vb
Public Module Example
    Public Sub Main()
        ' <Snippet1>
        Dim n As Double = 123.8
        Console.WriteLine($"{n:#,##0.0K}")
        ' The example displays the following output:
        '       123.8K
        ' </Snippet1>
    End Sub
End Module

There are two ways to indicate that characters are to be interpreted as literal characters and not as formatting characters, so that they can be included in a result string or successfully parsed in an input string:

  • By escaping a formatting character. For more information, see The "\" escape character.

  • By enclosing the entire literal string in quotation apostrophes.

The following example uses both approaches to include reserved characters in a custom numeric format string.

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/literal1.cs1

csharp
using System;

public class Example
{
   public static void Main()
   {
      // <Snippet1>
      double n = 9.3;
      Console.WriteLine($@"{n:##.0\%}");
      Console.WriteLine($@"{n:\'##\'}");
      Console.WriteLine($@"{n:\\##\\}");
      Console.WriteLine();
      Console.WriteLine($"{n:##.0'%'}");
      Console.WriteLine($@"{n:'\'##'\'}");
      // The example displays the following output:
      //      9.3%
      //      '9'
      //      \9\
      //
      //      9.3%
      //      \9\
      // </Snippet1>
   }
}

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/literal1.vb1

vb
Public Module Example
    Public Sub Main()
        ' <Snippet1>
        Dim n As Double = 9.3
        Console.WriteLine($"{n:##.0\%}")
        Console.WriteLine($"{n:\'##\'}")
        Console.WriteLine($"{n:\\##\\}")
        Console.WriteLine()
        Console.WriteLine($"{n:##.0'%'}")
        Console.WriteLine($"{n:'\'##'\'}")
        ' The example displays the following output:
        '      9.3%
        '      '9'
        '      \9\
        '
        '      9.3%
        '      \9\
        ' </Snippet1>
    End Sub
End Module

Notes

Floating-Point infinities and NaN

Regardless of the format string, if the value of a System.Half, System.Single, or System.Double floating-point type is positive infinity, negative infinity, or not a number (NaN), the formatted string is the value of the respective System.Globalization.NumberFormatInfo.PositiveInfinitySymbol, System.Globalization.NumberFormatInfo.NegativeInfinitySymbol, or System.Globalization.NumberFormatInfo.NaNSymbol property specified by the currently applicable System.Globalization.NumberFormatInfo object.

Control Panel settings

The settings in the Regional and Language Options item in Control Panel influence the result string produced by a formatting operation. Those settings are used to initialize the System.Globalization.NumberFormatInfo object associated with the current culture, and the current culture provides values used to govern formatting. Computers that use different settings generate different result strings.

In addition, if you use the System.Globalization.CultureInfo.%23ctor%28System.String%29 constructor to instantiate a new System.Globalization.CultureInfo object that represents the same culture as the current system culture, any customizations established by the Regional and Language Options item in Control Panel will be applied to the new System.Globalization.CultureInfo object. You can use the System.Globalization.CultureInfo.%23ctor%28System.String%2CSystem.Boolean%29 constructor to create a System.Globalization.CultureInfo object that does not reflect a system's customizations.

Rounding and fixed-point format strings

For fixed-point format strings (that is, format strings that do not contain scientific notation format characters), numbers are rounded to as many decimal places as there are digit placeholders to the right of the decimal point. If the format string does not contain a decimal point, the number is rounded to the nearest integer. If the number has more digits than there are digit placeholders to the left of the decimal point, the extra digits are copied to the result string immediately before the first digit placeholder.

Back to table

Example

The following example demonstrates two custom numeric format strings. In both cases, the digit placeholder (#) displays the numeric data, and all other characters are copied to the result string.

sample · csharpsamples/snippets/csharp/VS_Snippets_CLR/formatting.numeric.custom/cs/example1.cs10

csharp
using System;

public class Example
{
   public static void Main()
   {
      // <Snippet10>
      double number1 = 1234567890;
      string value1 = number1.ToString("(###) ###-####");
      Console.WriteLine(value1);

      int number2 = 42;
      string value2 = number2.ToString("My Number = #");
      Console.WriteLine(value2);
      // The example displays the following output:
      //       (123) 456-7890
      //       My Number = 42
      // </Snippet10>
   }
}

sample · vbsamples/snippets/visualbasic/VS_Snippets_CLR/formatting.numeric.custom/vb/example1.vb10

vb
' Visual Basic .NET Document
Option Strict On

<Assembly: CLSCompliant(True)>
Module Example1
    Public Sub Main()
        ' <Snippet10>
        Dim number1 As Double = 1234567890
        Dim value1 As String = number1.ToString("(###) ###-####")
        Console.WriteLine(value1)

        Dim number2 As Integer = 42
        Dim value2 As String = number2.ToString("My Number = #")
        Console.WriteLine(value2)
        ' The example displays the following output:
        '       (123) 456-7890
        '       My Number = 42
        ' </Snippet10>      
    End Sub
End Module

Back to table

See also