【问题标题】:How can I format a number into a string with leading zeros?如何将数字格式化为带有前导零的字符串?
【发布时间】:2011-03-24 11:23:46
【问题描述】:

我有一个需要转换为字符串的数字。首先我使用了这个:

Key = i.ToString();

但我意识到它的排序顺序很奇怪,所以我需要用零填充它。我怎么能这样做?

【问题讨论】:

标签: c# string string-formatting


【解决方案1】:

相当简单:

Key = i.ToString("D2");

D 代表“十进制数”,2 代表要打印的位数。

【讨论】:

  • 如果你使用string.Format("D2", value),你会在输出中得到D2。这不起作用。在这种情况下,我们必须使用"{0:00}"
  • 您应该改用string.Format("{0:D2}", value)。只是说 string.Format("D2", ...) 无论如何都不会替换任何内容,因为您没有占位符。
  • @infinitypanda 意识到这仅在 value 是 int 时才有效。例如,如果 value 是双精度数,则它必须是 string.Format("{0:00}", value)
  • 如果我们谈论的是“前导数字”,我认为答案是 i.ToString("00");其中“00”代表前导零。你可以尽可能增加这个数量。
【解决方案2】:

请参阅String formatting in C# 了解 String.Format 的一些使用示例

其实formatting int的一个更好的例子

String.Format("{0:00000}", 15);          // "00015"

或使用String Interpolation:

$"{15:00000}";                           // "00015"

【讨论】:

  • 请注意 String.Format("{0:00000}", "15");返回“15”,即它不适用于字符串。
  • 更短的方式:$"{15:D5}"; 将导致输出:"00015"
  • 如果您有int i 并且想要8 位数字,只需使用var iStr = $"{i:D8}
【解决方案3】:

如果您想保持固定宽度,例如 10 位,请这样做

Key = i.ToString("0000000000");

用任意数量的数字替换。

i = 123 将产生Key = "0000000123"

【讨论】:

    【解决方案4】:

    由于尚未有人提及这一点,如果您使用的是 C# 版本 6 或更高版本(即 Visual Studio 2015),那么您可以使用 string interpolation 来简化您的代码。所以不用string.Format(...),你可以这样做:

    Key = $"{i:D2}";
    

    【讨论】:

      【解决方案5】:

      使用:

      i.ToString("D10")
      

      请参阅 Int32.ToString (MSDN) 和 Standard Numeric Format Strings (MSDN)。

      或使用String.PadLeft。例如,

      int i = 321;
      Key = i.ToString().PadLeft(10, '0');
      

      将导致0000000321。虽然String.PadLeft 不适用于负数。

      请参阅String.PadLeft (MSDN)。

      【讨论】:

      • 我猜,一旦你尝试将它与负数一起使用,这会让你大吃一惊。
      • 谢谢 - 我用了第二个。我省略了“.ToString()” - 它仍然有效。
      【解决方案6】:

      对于插值字符串:

      $"Int value: {someInt:D4} or {someInt:0000}. Float: {someFloat: 00.00}"
      

      【讨论】:

        【解决方案7】:

        通常 String.Format("format", object) 优于 object.ToString("format")。因此,

        String.Format("{0:00000}", 15);  
        

        优于,

        Key = i.ToString("000000");
        

        【讨论】:

        • 是的,正如@cja 所问,为什么它更可取?而且我不是反对这种说法,我想知道为什么。
        • 第一个语法“感觉”更精确、可预测和清晰。最好将其表述为 Key = String.Format("{0:00000}", 15);与 Key = i.ToString("000000"); 进行比较使用第一种语法,我很确定我确切地知道我会得到的结果,如果碰巧我是一个字符,我确切地知道要更改什么(格式字符串。所以,简而言之,对我来说它更可取情感上的个人偏好,几乎没有半点理由支持 ;-) 那么就这样决定了吗?
        【解决方案8】:

        试试:

        Key = i.ToString("000000");
        

        不过,就个人而言,我想看看您是否不能直接对整数进行排序,而不是对字符串表示。

        【讨论】:

          【解决方案9】:

          这里我希望我的 no 限制为 4 位数字,如果它是 1,它应该显示为 0001,如果它是 11,它应该显示为 0011..以下是代码。

                  reciptno=1;//Pass only integer.
          
                  string formatted = string.Format("{0:0000}", reciptno);
          
                  TxtRecNo.Text = formatted;//Output=0001..
          

          我实现了这段代码来生成收据号。

          【讨论】:

            【解决方案10】:
            int num=1;
            string number=num.ToString().PadLeft(4, '0')
            

            输出="00001"

            编辑:更改为匹配 PadLeft 数量

            【讨论】:

              【解决方案11】:

              我找到了一种更好的方法,一路尝试,但对我没有用

              Convert.ToDecimal(LN).ToString("000000#");
              

              LN 是 Int64

              【讨论】:

                猜你喜欢
                • 2011-05-02
                • 1970-01-01
                • 1970-01-01
                • 2012-02-06
                • 1970-01-01
                • 2010-10-18
                • 2020-05-25
                • 1970-01-01
                相关资源
                最近更新 更多