Double.TryParse 返回一个值,我不需要一个值。我需要能够判断一个字符串是否是数字并且只返回一个布尔值。
有没有办法做到这一点?
我会考虑您需要确定的确切内容。“是数字”比起初听起来更模糊。考虑以下字符串,以及是否要将它们视为数字:
使用Double.TryParse
(使用 en-GB 文化 - 不要忘记文化问题!)会给你 True,False,True,True(尽管它不可表示),True,False。没错,没错。
如果您想知道以后调用 to 是否Double.TryParse
会成功,在此处调用它将是最准确的解决方案。如果您使用其他标准,则正则表达式可能更合适。您可能使用的标准示例:
除了上面的第四个和最后一个示例之外,这将不允许所有示例。
编辑:我现在注意到问题的标题包括“整数”。这几乎将规范检查减少到:
好吧,您可以使用正则表达式,但为什么不直接丢弃 Double.TryParse 中的值并继续前进呢?我认为尝试复制此代码不值得。
一种方法是添加引用Microsoft.VisualBasic
然后使用Information.IsNumeric().
using Microsoft.VisualBasic;
...
if (Information.IsNumeric("1233434.0"))
{
Console.WriteLine("Yes");
}
我刚刚启动了 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";
}
正则表达式怎么样?
string s = "13.2";
bool bIsDecimal = Regex.IsMatch("^-?\d+(\.\d+)?$");
应该测试它是否是十进制值。它不会告诉您它是否是有效的小数,例如,该数字是否适合小数范围。
试试这个数字:
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;
}