【问题标题】:check if a string contains a numeric value检查字符串是否包含数值
【发布时间】:2012-05-06 06:32:48
【问题描述】:

我正在尝试检查字符串是否包含数值,如果它不返回标签,那么我想显示主窗口。如何做到这一点?

If (mystring = a numeric value)
            //do this:
            var newWindow = new MainWindow();
            newWindow.Show();
If (mystring = non numeric)
            //display mystring in a label
            label1.Text = mystring;

else return error to message box

【问题讨论】:

  • 非数字是指没有数字,还是只是“不是所有数字”?

标签: c# string int


【解决方案1】:

使用 TryParse。

double val;
if (double.TryParse(mystring, out val)) {
    ..
} else { 
    ..
}

这适用于直接转换为数字的字符串。如果您还需要担心 $ 和 之类的东西,那么您需要先做一些工作来清理它。

【讨论】:

    【解决方案2】:
    Int32 intValue;
    if (Int32.TryParse(mystring, out intValue)){
      // mystring is an integer
    }
    

    或者,如果是十进制数:

    Double dblValue;
    if (Double.TryParse(mystring, out dblValue)){
      // mystring has a decimal number
    }
    

    顺便说一句,一些例子可以是found here。

    Testing foo:
    Testing 123:
        It's an integer! (123)
        It's a decimal! (123.00)
    Testing 1.23:
        It's a decimal! (1.23)
    Testing $1.23:
        It's a decimal! (1.23)
    Testing 1,234:
        It's a decimal! (1234.00)
    Testing 1,234.56:
        It's a decimal! (1234.56)
    

    我还测试了几个:

    Testing $ 1,234:                      // Note that the space makes it fail
    Testing $1,234:
        It's a decimal! (1234.00)
    Testing $1,234.56:
        It's a decimal! (1234.56)
    Testing -1,234:
        It's a decimal! (-1234.00)
    Testing -123:
        It's an integer! (-123)
        It's a decimal! (-123.00)
    Testing $-1,234:                     // negative currency also fails
    Testing $-1,234.56:
    

    【讨论】:

    • 所以 double 不检查它是否只有一个数字只有一个小数?
    • 顺便说一句,Double.TryParse 可以处理数字中的逗号,但 Int32.TryParse 不能。
    • 从来不知道逗号。似乎是一个奇怪的设计选择,因为作为 000 的分隔符,它们在浮点数和整数中同样有效或无效。如果有的话,只允许它们使用整数会更有意义,因为 FP 数字存在特定于文化的歧义!真的很奇怪。
    • @jamietre:是的,这确实很奇怪。我也很惊讶,当我继续前进时,负货币也失败了。为什么他们接受一种方法而不是下一种方法是……奇怪。
    • @Kirsty:如果你只关心它是否是一个数字,那么使用double.TryParse 作为一个整数也是一个有效的双精度数。如果您要求数字也是整数,则使用int.TryParse
    【解决方案3】:
    double value;
    if (double.tryParse(mystring, out value))
    {
            var newWindow = new MainWindow();
            newWindow.Show();
    }
    else
    {
        label1.Text = mystring;
    }
    

    【讨论】:

      【解决方案4】:

      您可以简单地引用 Microsoft.VisualBasic.dll,然后执行以下操作:

      if (Microsoft.VisualBasic.Information.IsNumeric(mystring))
      {
          var newWindow = new MainWindow();
          newWindow.Show();
      }
      else
      {
          label1.Text = mystring;
      }
      

      VB 实际上表现更好,因为它不会为每次失败的转换抛出异常。

      见:Exploring IsNumeric for C#

      【讨论】:

      • 使用 VB 库有点意思,但那篇文章肯定是在 TryParse 之前写的。没有理由使用 try/catch 来测试 C# 中的数字。
      • 是的,我敢肯定。虽然这是一个有趣的解决方案,这就是为什么我想我会分享它(作为一个 VB 人,我一直都在使用它)。
      • 老实说,我以前从未考虑过。我可能会犹豫是否只做一次性的,因为它是另一种依赖项,但可以肯定的是,它是你工具箱中的一个工具。
      • 我不会引用VB 来检查字符串是否为数字。还有很多其他的方法X.tryParse, Regex, LINQ, foreach有些比其他的更好,**但是没有必要使用C#小兄弟-VB。**这个任务(或者我应该说任务。)
      • @gdoron - 这只是一种替代解决方案。这一切都归结为偏好。
      【解决方案5】:

      您可以使用布尔值来判断字符串是否包含数字字符。

      public bool GetNumberFromStr(string str)
          {
              string ss = "";
              foreach (char s in str)
              {
                  int a = 0;
                  if (int.TryParse(Convert.ToString(s), out a))
                      ss += a;
              }
              if ss.Length >0
                 return true;
              else
                 return false;
          } 
      

      【讨论】:

      • 使用 TryParse(Convert...)) 是我能想到的测试字符是否为数字的最低效的方法。
      【解决方案6】:

      尝试将标签的标题转换为字符串,然后 使用Int.TryParse() 方法来决定文本是整数还是字符串。如果是,该方法将返回 true,否则将返回 false。代码如下:

      if (Int.TryParse(<string> , out Num) == True)
      {
         // is numeric
      }
      else
      {
         //is string
      }   
      

      如果转换成功,Num 将包含您的整数值

      【讨论】:

        【解决方案7】:

        可以在以下位置找到一个很好的方法示例:http://msdn.microsoft.com/en-us/library/f02979c7.aspx

        甚至有一些代码几乎完全符合您的要求。如果您期望整数值,则可以使用 Int32.TryParse(string) 。如果您预计双打,请使用 Double.TryParse(string)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-07
          • 2013-11-20
          • 2018-07-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多