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