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


Практическое руководство. Добавление к числу начальных нулей.

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

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

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

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

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

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

    Строку формата можно также использовать в методе, например Format или WriteLine, в котором используется составное форматирование.

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

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 caling 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
byte byteValue = 254;
short shortValue = 10342;
int intValue = 1023983;
long lngValue = 6985321;               
ulong ulngValue = UInt64.MaxValue;

// Display integer values by caling 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

Добавление в начало целого числа определенного количества нулей

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

  2. Определите, отображать целое число десятичным или шестнадцатеричным. Форматирование в виде десятичного значения требует использования стандартного описателя формата "D"; форматирование в виде шестнадцатеричного значения требует использования стандартного описателя формата "X".

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

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

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

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

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      
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      

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

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

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

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

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

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(sngValue.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
'       01549230
'       
'               01053240
'            00103932.52
'               01549230
'          9034521202.93      
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(sngValue.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
//       01549230
//       
//               01053240
//            00103932.52
//               01549230
//          9034521202.93      

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

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

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

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

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

      – или –

      Если оно не содержит символ десятичного разделителя, определите длину строки.

  3. Создайте строку настраиваемого формата, в которой для каждого нуля, который должен отображаться в начале строки, используется заполнитель нуля ("0"), а для каждой цифры в строке по умолчанию используется либо заполнитель нуля, либо заполнитель цифры ("#").

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

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

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            
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            

См. также

Основные понятия

Строки настраиваемых числовых форматов

Строки стандартных числовых форматов

Составное форматирование