【问题标题】:toString() of int e = 0000007 omits all zeros. How can I preserve them?toString() of int e = 0000007 省略所有零。我怎样才能保存它们?
【发布时间】:2011-01-09 00:31:19
【问题描述】:

我正在尝试用 C# 编写一个程序,该程序接受一个 int x 并确定它是否正好有 7 位数字。现在我正在使用 x.toString().Length == 7 来检查,但我注意到如果数字以 0 开头,它会自动被省略并且我得到一个不正确的答案(即程序认为输入长度较小超过 7)

有没有办法解决这个问题?提前致谢。

编辑:对不起,我应该提到,这是一个收集和验证 ID 号码格式的程序(所以我不希望像 0000001 这样的东西默认为 1)感谢字符串输入建议,我想我'我要去试试。

【问题讨论】:

  • 整数不以 0 开头。如果数字是 1 怎么办。这在技术上不是 0000001 吗?为什么这与 0123456 不同?
  • int e = 0000007 确实 not 有七位数字,但就编译器而言。您如何收集您的意见?

标签: c# numbers int


【解决方案1】:

如果要保留输入格式,则不得将输入转换为int。您必须将其存储在 String 中。

你说你的程序需要int。那个时候你已经输了。您需要更改该接口以接受String 输入。

【讨论】:

  • 确实如此 - 一旦你转换为 int ,那么你的输入处理程序就无法区分任意数量的零 - 1 == 01 == 001 == 0001 ... &c。也许检查输入 could 是否是 int,但不是在检查输入 string 的 string.Length 之前。
【解决方案2】:

没有。数字文字具有前导 0 是完全有效的,但是 a) 许多语言认为这是一个八进制文字,并且 b) 前导 0 实际上并不作为数字的一部分存在。如果您需要一个字符串,则以字符串文字开头。

【讨论】:

    【解决方案3】:

    如果您不关心前导零,那么您实际上是在寻找 7 位或更少的数字。您可以检查:

    x.toString().Length <= 7
    

    或更好:

    x < 10000000
    

    【讨论】:

      【解决方案4】:

      也许我错了,但对我来说,0000001 == 1,并且 1 有一位,而不是七位。所以这是数学上正确的行为。

      【讨论】:

        【解决方案5】:

        你应该使用字符串来检查长度计数,包括0。

        那我想问“为什么要显示 0000007?为了什么?”

        【讨论】:

          【解决方案6】:

          我认为您可以将其格式化为字符串:

          int myInt=1;
          myInt.ToString("0000000");
          

          打印:

          0000001.
          

          所以你可以这样做:

          if (myInt.ToString("0000000").Length==7)
          

          【讨论】:

            【解决方案7】:

            你说你要的是int,但我想你收到的是string

            int i = 0;
            string number = Console.ReadLine();
            if (Int32.TryParse(number, out i))
            {
                //if (i.ToString().Length == 7) // you can try this too
                if (i > 999999 && i < 10000000)
                {
                    Console.WriteLine("Have exactly 7 digits");
                }
                else
                {
                    Console.WriteLine("Doesn't have exactly 7 digits");
                }
            }
            else
            {
                Console.WriteLine("Not an Int32 number");
            }
            

            这样你尝试将接收到的号码转换为Int32,然后比较它的长度。

            【讨论】:

              【解决方案8】:

              你可以简单地写:

              int input = 5;
              if(input.ToString("0000000").Length == 7)
              {
                  //do your stuff
              }
              

              【讨论】:

                【解决方案9】:

                您可以将数字保存为带有省略零的 int。但是如果你想用零显示数字,那么你可以使用 if 语句和 while 循环。例如,

                假设值存储在数字数组中,您需要将它们存储为 int 以便您可以对其进行排序,但显示为字符串,以便您可以使用前导零显示。

                int[] numbers = new int[3];
                
                numbers[0] = 001;
                numbers[1] = 002;
                numbers[2] = 123;
                
                String displayed_Number;
                
                        for (int i = 0; i < numbers.Length; i++)
                        {
                            displayed_Number = numbers[i].ToString();
                
                            if (displayed_Number.Length == 3)
                            {
                                listBox.Items.Add(displayed_Number);
                            }
                            else if (displayed_Number.Length < 3)
                            {
                                while (displayed_Number.Length < 3)
                                {
                                    displayed_Number = "0" + displayed_Number;
                                }
                                listBox.Items.Add(displayed_Number);
                            }
                        }
                

                输出为 001 002 123

                这样您可以在显示时保持数字中的零。并且可以将它们存储为 int,以防您必须将它们存储为 int。

                【讨论】:

                • 我忘了指出,这个算法只有在所有值的长度都是恒定的情况下才有效。所以在这个例子中,值的长度是 3。如果你有不同长度的值,则必须修改算法。
                猜你喜欢
                • 2014-04-18
                • 1970-01-01
                • 1970-01-01
                • 2019-08-18
                • 2014-06-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多