【问题标题】:String format in .NET: convert integer to fixed width string?.NET 中的字符串格式:将整数转换为固定宽度的字符串?
【发布时间】:2011-06-19 00:26:49
【问题描述】:

我在 .NET/C# 中有一个 int,我想将其转换为特定格式的字符串。

如果值为 1,我希望字符串为“001”。

10 = "010"。

116 = "116"。

等等……

我正在研究字符串格式,但到目前为止没有成功。我也不会有超过 999 的值。

【问题讨论】:

    标签: .net string string-formatting


    【解决方案1】:

    最简单的方法是为此使用 .NET 的内置功能:

    var r = 10;
    var p = r.ToString("000");
    

    无需循环或填充。

    【讨论】:

    • 不知道这种方法..加一个:)
    • 对于负数,这将变成 4 个字符。例如,-10 变成“-010”
    【解决方案2】:

    看看PadLeft

    例如:

    int i = 40;
    
    string s = i.ToString().PadLeft(3, '0'); 
    

    s == "040"

    【讨论】:

    • 内存影响是什么?它会比使用其他方法导致更高的内存负载吗?
    • 还不错,但我认为下面的 vcsjones 解决方案要好得多。至少少 1 个为该字符串创建的实例。
    • 负数有风险使用这种方法。 “-1”变成“0-1”
    【解决方案3】:

    另一种选择是:

    i.ToString("d3")
    

    【讨论】:

    • @Brady 你能更具体一点吗?它对我来说很好。
    • 当然。一旦编译器到达该行,该值就不会改变,它只是越过它,就好像它不存在一样。 Dim thisDate As Date Dim thisMonth As Integer thisDate = Date.Today thisMonth = Month(thisDate) thisMonth.ToString("00") = 我的“2”而不是“02”。
    • @Brady ToString 没有改变任何东西,它返回字符串。也许这就是问题所在? (你实际上并没有展示你是如何输出这个值的,所以很难说。)
    • 呃,我试图存储变量。感谢您为我指明正确的方向!
    • 对于负数,这将变成 4 个字符。例如,-10 变成“-010”
    【解决方案4】:

    我记得看到这样的代码用零填充数字...

    int[] nums = new int[] { 1, 10, 116 };
    
    foreach (int i in nums)
    {
        Console.WriteLine("{0:000}", i);
    }
    

    输出:

    001
    010
    116
    

    【讨论】:

    • 只有当你想将它们输出到控制台时才有效。如果你想和他们做点别的事情怎么办?
    【解决方案5】:

    为了完整起见,这种方式也是可以的,我更喜欢它,因为它更清晰,更灵活。

    int value = 10;
    
    // 010 
    resultString = $"{value:000}";
    
    // The result is: 010 
    resultString = $"The result is: {value:000}";
    

    【讨论】:

      【解决方案6】:

      如果我们想在一个可变固定长度输出的函数中使用它,那么这个方法

      public string ToString(int i, int Digits)
      {
       return i.ToString(string.Format("D{0}", Digits));
      }
      

      运行速度比这快 20%

      return i.ToString().PadLeft(Digits, '0'); 
      

      但如果我们还想使用带有字符串输入(例如 HEX 数字)的函数,我们可以使用这种方法:

      public string ToString(string value, int Digits)
       {
       int InsDigits= Digits - value.Length;
       return ((InsDigits> 0) ? new String('0', InsDigits) + value : value);
       }
      

      【讨论】:

        【解决方案7】:

        每次我需要将内容附加到字符串的开头以匹配这样的条件时,我都使用了一个 while 循环。像这样:

        while (myString.length < 5) myString = "0" + myString;
        

        虽然可能有一种 string.format 方法可以做到这一点,但这对我来说之前效果很好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-02
          • 2014-07-21
          • 2012-01-15
          • 2021-07-03
          • 2017-02-22
          • 2013-02-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多