【问题标题】:Specifying the length of Int containing 0s指定包含 0 的 Int 的长度
【发布时间】:2014-06-03 10:57:55
【问题描述】:

我想将包含 5 个零 ("00000") 的字符串转换为 Int,以便它可以递增。 每当我使用 Convert.ToInt32() 将字符串转换为整数时,该值变为 0。 如何确保整数在转换后保持固定长度?

我希望能够将值从“00000”增加到“00001”等等,以便该值在数据库中以那么多位数出现,而不是 0 或 1。

如果您要对问题投反对票,您至少可以留下反馈,说明您这样做的原因...

【问题讨论】:

  • 没有像00000 这样的int。它是0,仅此而已。 00000 只是它的一个字符串表示。您不能拥有像 00000 这样的 int
  • “00000”的int 表示仅限0。您可以在将其转换回string 时对其进行格式化。你有什么问题?
  • 如果你想让一个 int 的长度为 5,那么它的值必须至少为 10000,否则你想要的没有意义。也许你想要的是字符串格式。
  • 你也可以像string newstring = i.ToString().PadLeft(5, '0');一样做

标签: c# int string-length


【解决方案1】:

整数是整数。仅此而已。

所以你拥有的int 的值为零,无法添加任何“长度”元数据或类似的。

我猜你真正想要的是——在某个时候——会再次出现string。您希望 string 代表您的号码,但要包含 5 个字符和前导零。

您可以通过以下方式实现:

string s = i.ToString("00000")

编辑

您说您希望这些数字在您的数据库中显示为这样。 问问自己:

数据库中真的需要这样吗?还是只要从数据库中读取数字就对其进行格式化就足够了?

根据这一点,在写入或读取数据库时格式化它们(如上所示)。当然,前一种情况需要更多的存储空间,你不能真正使用 SQL 或类似的方法来执行算术运算!

【讨论】:

  • 您确定该字符串将包含 5 个零吗?如果“i”是 111,那么输出会是什么?
  • @Kashif 会是 00111,我认为他想要填充,至少在他描述增量的评论中:......“00000”到“00001”......
【解决方案2】:

整数没有长度,它纯粹是一个数值。如果要保持长度,则必须将有关长度的信息存储在其他地方。

您可以将值包装在将长度保存在属性中的对象中。示例:

public class FormattedInt {

  private int _value, _length;

  public FormattedInt(string source) {
    _length = source.Length;
    _value = Int32.Parse(source);
  }

  public void Increase() {
    _value++;
  }

  public override string ToString() {
    return _value.ToString(new String('0', _length));
  }

}

用法:

FormattedInt i = new FormattedInt("0004");
i.Increase();
string s = i.ToString(); // 0005

【讨论】:

    【解决方案3】:

    正如 olydis 上面所说,int 只是一个数字。它没有指定显示格式。我也不建议将它用零填充存储在数据库中。这是一个int,将其存储为int

    出于显示目的,在应用程序中,报告等,然后填充零。

    string s = i.ToString("00000");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 2020-08-27
      • 1970-01-01
      • 2012-06-11
      相关资源
      最近更新 更多