【问题标题】:Convert.ToInt32 - Keep Preceding ZeroConvert.ToInt32 - 保持前面的零
【发布时间】:2020-02-15 10:40:00
【问题描述】:

我将数字存储在数据库中,有些数字的第一个数字是零,因为它们总是需要一定数量的数字。我有一个输入了这个数字的文本框,所以我做了一个 Convert.ToInt32(TextBox.Text),如果它有一个,它会删除起始零。有谁知道我如何保持零,或者在转换后将其添加到开头?

【问题讨论】:

  • 如果你想要一个前导零,你肯定不想转换为 Int32 吗?为什么不将其保留为字符串?
  • 我不认为你可以保留它们。但您可以格式化转换后的 int 以再次显示它们:msdn.microsoft.com/en-us/library/dd260048.aspx
  • @Matt 因为数据库类型是Int
  • 那么问题就变成了:如何在文本字段中显示整数时添加前导零以保持一定数量的数字。
  • @Richard:更正,如果有前导零,则数据库类型不是 int。

标签: c#


【解决方案1】:

保留前面的零的唯一方法是不将其转换为数字。

数字没有任何前面的零,因为它只包含值,而不是值的字符串表示形式。

如果要将其转换为数字,然后将其转换回字符串,重新创建前面的零,可以使用自定义格式:

string formatted = number.ToString("00000");

或者对于动态位数:

string formatted = number.ToString(new String('0', numberOfDigits));

【讨论】:

  • +1 用于解释这两个选项,因为最佳解决方案取决于数据的性质 (imo)
  • number.ToString().PadLeft(numberOfDigits, '0') 不是更简单吗?至少更容易阅读我会说... :)
  • 我在做这样的填充时担心负值。例如,您的 PadLeft 选项将如下所示:“00-9”而不是 -009。
【解决方案2】:

如果您需要保留填充零,则将该值保留为字符串。整数不能保留有关填充零的信息,因为它们只是表示一个数字。

如果您需要验证输入的数字,请使用Int32.TryParse 或将值与regular expression 匹配(如"^\d+$")。

编辑:除了Guffa's answer,您还可以使用“D”(docs)格式化为指定数量的字符(必要时使用零填充):

string formatted = number.ToString("D5"); // 13 -> 00013

【讨论】:

  • +1,用于提示十进制 ("D") 格式说明符。由于问题指定Convert.ToInt32(),这是我个人首选的填充值的方法。
【解决方案3】:

我的做法是将号码放回数据库而不是通过myint.ToString("0000000") 输入int 使用string。 0 的数量是填充数字的总长度。

【讨论】:

    【解决方案4】:

    这也应该有效。

    123.ToString().PadLeft(5, '0'); // 00123
    

    【讨论】:

    • 正如对 Svish 的评论所评论的那样,这会产生带有负整数的奇怪结果。
    【解决方案5】:

    您必须使用字符串格式保留前导零:

    int fooValue = Convert.ToInt32(TextBox.Text)
    //operations with foo Value
    string formatValue = fooValue.ToString("#0000");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-11
      • 2015-03-04
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      相关资源
      最近更新 更多