Поделиться через


Как заполнить число ведущими нулями

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

Заполнение целого числа ведущими нулями до определенной длины

  1. Определите минимальное количество цифр, которое должно отображаться в целочисленном значении. Включите в это число любые начальные цифры.

  2. Определите, следует ли отображать целое число в виде десятичного или шестнадцатеричного числа.

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

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

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

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

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("X").Length метод.ToString("D").Length

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

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

В следующем примере целочисленное значение заполняется пятью ведущими нулями:

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) метод number и передайте ему строку пользовательского формата. Вы также можете использовать строку пользовательского формата с интерполяцией строк или метод, поддерживающий составное форматирование.

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

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. Создайте строку пользовательского формата, в которой используются:

    • Заполнитель нуля ("0") для каждого из ведущих нулей в строке.
    • Заполнитель нуля или заполнитель цифры "#" для представления каждой цифры в строке по умолчанию.
  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            

См. также