Практическое руководство. Дополнение числа начальными нулями

К целому числу можно добавить начальные нули, используя строку стандартного числового формата "D" с описателем точности. С помощью строки настраиваемого числового формата начальные нули можно добавлять как к целым числам, так и к числам с плавающей запятой. В этой статье показано, как использовать оба метода для дополнения числа начальными нулями.

Дополнение целого числа начальными нулями до определенной длины

  1. Определите минимальное число разрядов для целого числа. Добавьте к этому значению число начальных разрядов.

  2. Определите, хотите ли вы показывать целое число как десятичное или шестнадцатеричное.

    • Чтобы показать целое число как десятичное, вызовите метод ToString(String) и передайте строку "D n" как значение параметра format, где n представляет минимальную длину строки.

    • Для отображения целого числа в виде шестнадцатеричного значения вызовите его метод ToString(String) и передайте строку "X n" в качестве значения параметра format, где n представляет минимальную длину строки.

Также можно использовать строку формата в интерполированной строке в C# и Visual Basic или вызвать метод, например String.Format или Console.WriteLine, который использует составное форматирование.

Следующий пример форматирует несколько целых значений с добавлением начальных нулей, чтобы общая длина форматированного числа составляла по крайней мере 8 символов.

byte byteValue = 254;
short shortValue = 10342;
int intValue = 1023983;
long lngValue = 6985321;
ulong ulngValue = UInt64.MaxValue;

// Display integer values by calling the ToString method.
Console.WriteLine("{0,22} {1,22}", byteValue.ToString("D8"), byteValue.ToString("X8"));
Console.WriteLine("{0,22} {1,22}", shortValue.ToString("D8"), shortValue.ToString("X8"));
Console.WriteLine("{0,22} {1,22}", intValue.ToString("D8"), intValue.ToString("X8"));
Console.WriteLine("{0,22} {1,22}", lngValue.ToString("D8"), lngValue.ToString("X8"));
Console.WriteLine("{0,22} {1,22}", ulngValue.ToString("D8"), ulngValue.ToString("X8"));
Console.WriteLine();

// Display the same integer values by using composite formatting.
Console.WriteLine("{0,22:D8} {0,22:X8}", byteValue);
Console.WriteLine("{0,22:D8} {0,22:X8}", shortValue);
Console.WriteLine("{0,22:D8} {0,22:X8}", intValue);
Console.WriteLine("{0,22:D8} {0,22:X8}", lngValue);
Console.WriteLine("{0,22:D8} {0,22:X8}", ulngValue);
// The example displays the following output:
//                     00000254               000000FE
//                     00010342               00002866
//                     01023983               000F9FEF
//                     06985321               006A9669
//         18446744073709551615       FFFFFFFFFFFFFFFF
//
//                     00000254               000000FE
//                     00010342               00002866
//                     01023983               000F9FEF
//                     06985321               006A9669
//         18446744073709551615       FFFFFFFFFFFFFFFF
//         18446744073709551615       FFFFFFFFFFFFFFFF
Dim byteValue As Byte = 254
Dim shortValue As Short = 10342
Dim intValue As Integer = 1023983
Dim lngValue As Long = 6985321
Dim ulngValue As ULong = UInt64.MaxValue

' Display integer values by calling the ToString method.
Console.WriteLine("{0,22} {1,22}", byteValue.ToString("D8"), byteValue.ToString("X8"))
Console.WriteLine("{0,22} {1,22}", shortValue.ToString("D8"), shortValue.ToString("X8"))
Console.WriteLine("{0,22} {1,22}", intValue.ToString("D8"), intValue.ToString("X8"))
Console.WriteLine("{0,22} {1,22}", lngValue.ToString("D8"), lngValue.ToString("X8"))
Console.WriteLine("{0,22} {1,22}", ulngValue.ToString("D8"), ulngValue.ToString("X8"))
Console.WriteLine()

' Display the same integer values by using composite formatting.
Console.WriteLine("{0,22:D8} {0,22:X8}", byteValue)
Console.WriteLine("{0,22:D8} {0,22:X8}", shortValue)
Console.WriteLine("{0,22:D8} {0,22:X8}", intValue)
Console.WriteLine("{0,22:D8} {0,22:X8}", lngValue)
Console.WriteLine("{0,22:D8} {0,22:X8}", ulngValue)
' The example displays the following output:
'                     00000254               000000FE
'                     00010342               00002866
'                     01023983               000F9FEF
'                     06985321               006A9669
'         18446744073709551615       FFFFFFFFFFFFFFFF
'       
'                     00000254               000000FE
'                     00010342               00002866
'                     01023983               000F9FEF
'                     06985321               006A9669
'         18446744073709551615       FFFFFFFFFFFFFFFF

Дополнение целого числа определенным количеством начальных нулей

  1. Определите, сколько начальных нулей должно быть в целом числе.

  2. Определите, хотите ли вы показывать целое число как десятичное или шестнадцатеричное.

    • Для форматирования в виде десятичного значения необходимо использовать описатель стандартного формата D.

    • Для форматирования в виде шестнадцатеричного значения необходимо использовать описатель стандартного формата X.

  3. Определите длину недополненной числовой строки, вызвав метод ToString("D").Length или ToString("X").Length целого числа.

  4. Добавьте число начальных нулей, которое следует добавить в форматированную строку, к длине недополненной числовой строки. Добавление количества начальных нулей определяет общую длину дополненной строки.

  5. Вызовите для целого значения метод ToString(String) и передайте строку "D n" для десятичных строк или строку "X n" для шестнадцатеричных строк, где n означает общую длину дополненной строки. Строку форматирования "D n" или "X n" можно также использовать в методе, поддерживающем составное форматирование.

Следующий пример дополняет целое число пятью начальными нулями.

int value = 160934;
int decimalLength = value.ToString("D").Length + 5;
int hexLength = value.ToString("X").Length + 5;
Console.WriteLine(value.ToString("D" + decimalLength.ToString()));
Console.WriteLine(value.ToString("X" + hexLength.ToString()));
// The example displays the following output:
//       00000160934
//       00000274A6
Dim value As Integer = 160934
Dim decimalLength As Integer = value.ToString("D").Length + 5
Dim hexLength As Integer = value.ToString("X").Length + 5
Console.WriteLine(value.ToString("D" + decimalLength.ToString()))
Console.WriteLine(value.ToString("X" + hexLength.ToString()))
' The example displays the following output:
'       00000160934
'       00000274A6      

Дополнение числового значения начальными нулями до определенной длины

  1. Определите, сколько разрядов слева от десятичного разделителя должно быть в строковом представлении числа. Добавьте к этому значению число начальных нулей.

  2. Определите строку настраиваемого формата числа, использующую местозаполнитель нуля (0) для представления минимального количества нулей.

  3. Вызовите метод ToString(String) числа и передайте ему строку настраиваемого формата. Вы также можете использовать строку настраиваемого формата с интерполяцией строки или методом, поддерживающим составное форматирование.

Следующий пример форматирует несколько числовых значений с начальными нулями. В результате общая длина форматированного числа составляет по крайней мере восемь цифр слева от десятичного разделителя.

string fmt = "00000000.##";
int intValue = 1053240;
decimal decValue = 103932.52m;
float sngValue = 1549230.10873992f;
double dblValue = 9034521202.93217412;

// Display the numbers using the ToString method.
Console.WriteLine(intValue.ToString(fmt));
Console.WriteLine(decValue.ToString(fmt));
Console.WriteLine(sngValue.ToString(fmt));
Console.WriteLine(dblValue.ToString(fmt));
Console.WriteLine();

// Display the numbers using composite formatting.
string formatString = " {0,15:" + fmt + "}";
Console.WriteLine(formatString, intValue);
Console.WriteLine(formatString, decValue);
Console.WriteLine(formatString, sngValue);
Console.WriteLine(formatString, dblValue);
// The example displays the following output:
//       01053240
//       00103932.52
//       01549230
//       9034521202.93
//
//               01053240
//            00103932.52
//               01549230
//          9034521202.93
Dim fmt As String = "00000000.##"
Dim intValue As Integer = 1053240
Dim decValue As Decimal = 103932.52d
Dim sngValue As Single = 1549230.10873992
Dim dblValue As Double = 9034521202.93217412

' Display the numbers using the ToString method.
Console.WriteLine(intValue.ToString(fmt))
Console.WriteLine(decValue.ToString(fmt))
Console.WriteLine(sngValue.ToString(fmt))
Console.WriteLine(dblValue.ToString(fmt))
Console.WriteLine()

' Display the numbers using composite formatting.
Dim formatString As String = " {0,15:" + fmt + "}"
Console.WriteLine(formatString, intValue)
Console.WriteLine(formatString, decValue)
Console.WriteLine(formatString, sngValue)
Console.WriteLine(formatString, dblValue)
' The example displays the following output:
'       01053240
'       00103932.52
'       01549230
'       9034521202.93
'       
'               01053240
'            00103932.52
'               01549230
'          9034521202.93      

Дополнение числового значения определенным количеством начальных нулей

  1. Определите, сколько начальных нулей должно быть в числовом значении.

  2. Определите количество разрядов слева от десятичного разделителя в недополненной числовой строке:

    1. Определите, содержит ли строковое представление числа символ десятичной точки.

    2. Если это так, определите число символов слева от десятичной точки.

      -или-

      Если строка не содержит десятичный разделитель, определите длину строки.

  3. Создайте строку настраиваемого формата, которая использует:

    • Местозаполнитель нуля для каждого начального нуля в строке.

    • Нулевой местозаполнитель или местозаполнитель разряда # для представления каждого разряда в строке по умолчанию.

  4. Передайте строку настраиваемого формата как параметр методу ToString(String) числа или методу, поддерживающему составное форматирование.

Следующий пример дополняет два значения типа Double число пятью начальными нулями.

double[] dblValues = { 9034521202.93217412, 9034521202 };
foreach (double dblValue in dblValues)
{
   string decSeparator = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
   string fmt, formatString;

   if (dblValue.ToString().Contains(decSeparator))
   {
      int digits = dblValue.ToString().IndexOf(decSeparator);
      fmt = new String('0', 5) + new String('#', digits) + ".##";
   }
   else
   {
      fmt = new String('0', dblValue.ToString().Length);
   }
   formatString = "{0,20:" + fmt + "}";

   Console.WriteLine(dblValue.ToString(fmt));
   Console.WriteLine(formatString, dblValue);
}
// The example displays the following output:
//       000009034521202.93
//         000009034521202.93
//       9034521202
//                 9034521202
Dim dblValues() As Double = {9034521202.93217412, 9034521202}
For Each dblValue As Double In dblValues
    Dim decSeparator As String = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator
    Dim fmt, formatString As String

    If dblValue.ToString.Contains(decSeparator) Then
        Dim digits As Integer = dblValue.ToString().IndexOf(decSeparator)
        fmt = New String("0"c, 5) + New String("#"c, digits) + ".##"
    Else
        fmt = New String("0"c, dblValue.ToString.Length)
    End If
    formatString = "{0,20:" + fmt + "}"

    Console.WriteLine(dblValue.ToString(fmt))
    Console.WriteLine(formatString, dblValue)
Next
' The example displays the following output:
'       000009034521202.93
'         000009034521202.93
'       9034521202
'                 9034521202            

См. также