1

Double.TryParse 返回一个值,我不需要一个值。我需要能够判断一个字符串是否是数字并且只返回一个布尔值。

有没有办法做到这一点?

4

6 回答 6

12

我会考虑您需要确定的确切内容。“是数字”比起初听起来更模糊。考虑以下字符串,以及是否要将它们视为数字:

  • “南”
  • “楠”
  • “无穷”
  • “0.0000000000000000000000000000000000000000000000000001”
  • “1e5”
  • “1e500”
  • “1,000”
  • “+1”

使用Double.TryParse(使用 en-GB 文化 - 不要忘记文化问题!)会给你 True,False,True,True(尽管它不可​​表示),True,False。没错,没错。

如果您想知道以后调用 to 是否Double.TryParse会成功,在此处调用它将是最准确的解决方案。如果您使用其他标准,则正则表达式可能更合适。您可能使用的标准示例:

  • 可以是 + 或 -,但只能在第一个字符中
  • 任何字符都可以有一个句点。您可能希望在末尾避免一个 - 应该是“1”。有效吗?
  • 除上述以外,所有字符都必须是数字

除了上面的第四个和最后一个示例之外,这将不允许所有示例。

编辑:我现在注意到问题的标题包括“整数”。这几乎将规范检查减少到:

  • 你想允许前导零(例如-00012)吗?
  • 范围是多少?
  • 你只需要小数(而不是十六进制等)吗?
  • 你需要接受千位分隔符吗?
  • 您对前导/尾随空格的政策是什么?
于 2008-12-31T08:52:16.213 回答
8

好吧,您可以使用正则表达式,但为什么不直接丢弃 Double.TryParse 中的值并继续前进呢?我认为尝试复制此代码不值得。

于 2008-12-31T08:20:50.287 回答
5

一种方法是添加引用Microsoft.VisualBasic然后使用Information.IsNumeric().

using Microsoft.VisualBasic;

...

if (Information.IsNumeric("1233434.0"))
{
    Console.WriteLine("Yes");
}
于 2008-12-31T08:18:51.320 回答
1

我刚刚启动了 Visual Studio Express(2005 年和 2008 年)。Intellisense 表示 Double.TryParse() 的返回值是布尔值。以下内容在有限的测试下对我有用......

double res; // you must be under very resource-constrained 
            // conditions if you can't just declare a double
            // and forget about it

if (Double.TryParse(textBox1.Text, out res)) {
    label1.Text = "it's a number";
} else {
    label1.Text = "not a number";
}
于 2008-12-31T09:40:36.273 回答
1

正则表达式怎么样?

string s = "13.2";
bool bIsDecimal = Regex.IsMatch("^-?\d+(\.\d+)?$");

应该测试它是否是十进制值。它不会告诉您它是否是有效的小数,例如,该数字是否适合小数范围。

于 2008-12-31T08:20:57.667 回答
0

试试这个数字:

public static bool IsNumeric(object Expression)

{

  bool isNum;

  double retNum;

  isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any,System.Globalization.NumberFormatInfo.InvariantInfo, out retNum );

  return isNum;

}

于 2009-01-27T15:04:53.880 回答