【问题标题】:Format string to a 3 digit number将字符串格式化为 3 位数字
【发布时间】:2021-07-09 10:37:09
【问题描述】:

我不想这样做,而是想利用string.format() 来完成相同的结果:

if (myString.Length < 3)
{
    myString =  "00" + 3;
}

【问题讨论】:

  • 我们来看看这个帖子:here in stackoverflow
  • 你能解释一下为什么myString 应该变成“003”吗?除了预期的长度之外,与数字“3”的相关性是什么?

标签: c# string numbers format


【解决方案1】:

这是一个简写字符串formatInterpolation

$"{value:D3}"

【讨论】:

    【解决方案2】:

    这是使用字符串插值 C# 7 完成的方法

    $"{myString:000}"
    

    【讨论】:

      【解决方案3】:
       string.Format("{0:000}", myString);
      

      【讨论】:

        【解决方案4】:

        (还不能以足够的声誉发表评论,让我添加一个旁注)

        以防万一您的输出需要固定长度为 3 位,即数字运行到 1000 或更多(保留固定长度),不要忘记在其上添加 mod 1000 .

        yourNumber=1001;
        yourString= yourNumber.ToString("D3");        // "1001" 
        yourString= (yourNumber%1000).ToString("D3"); // "001" truncated to 3-digit as expected
        

        在 Fiddler https://dotnetfiddle.net/qLrePt 上跟踪示例

        【讨论】:

        • 这引入了一个额外的、不必要的步骤。
        • @Paul - 他说如果输入可能 > 1000,并且要求输出始终是 3 个字符,那么满足该要求的一种方法是强制传入的数字3位数以内;例如国防部。正如他的代码行中的 cmets 所示,仅使用“D3”将输出 4 个字符的值 1001。因此,对于这种使用场景,请使用最后一行。 (例如,我在调试输出时使用了类似的技术,当该值是我正在打印详细信息的复杂对象的一部分时,我希望详细信息对齐,可以错过一些高位数字。)
        【解决方案5】:

        你也可以这样做:string.Format("{0:D3}, 3);

        【讨论】:

          【解决方案6】:

          必须是String.Format吗?

          这看起来像是 String.Padleft 的工作

          myString=myString.PadLeft(3, '0');
          

          或者,如果您直接从 int 转换:

          myInt.toString("D3");
          

          【讨论】:

            【解决方案7】:

            “如何:用前导零填充数字” http://msdn.microsoft.com/en-us/library/dd260048.aspx

            【讨论】:

              【解决方案8】:

              如果你只是格式化一个数字,你可以直接提供正确的custom numeric format 使其成为 3 位字符串:

              myString = 3.ToString("000");
              

              或者,或者,使用standard D format string

              myString = 3.ToString("D3");
              

              【讨论】:

              • 如果要在构造字符串中直接使用格式化数字,也可以使用:string.Format("This is my number: {0:D3}", number)
              • @coeing 意识到这仅在 number 是 int 时才有效。例如,如果 number 是双精度数,则它必须是 string.Format("{0:000}", number)
              • 或字符串插值$"This is my number: {number.ToString("D3")}";
              • 短字符串插值var myString = $"This is my number: {number:D3}";
              【解决方案9】:

              它叫Padding

              myString.PadLeft(3, '0')
              

              【讨论】:

              • 那是蛮力方法,而不是使用格式选项提出的问题
              • 有没有一种情况会产生不同的结果?从技术上讲,.ToString() 也没有直接使用String.Format()(尽管它会在幕后)......
              • .ToString("format")String.Format("format", value) 是一样的:用格式字符串格式化一个值。
              • 从问题中不清楚格式应该始终应用于静态数字(为什么 OP 选择使用 '3' 对我来说仍然不清楚,因此我的问题在上面)。它很可能是其他一些字符,不能使用数字格式化程序。在这种情况下,填充是一种安全的选择。
              猜你喜欢
              • 1970-01-01
              • 2010-10-16
              • 1970-01-01
              • 1970-01-01
              • 2012-06-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多