我正在使用Double.TryParse()
来查找给定字符串是否为数字。我不知道TryParse
是如何运作的。但是当我给出像54.34.23
这样的输入时,它返回true。我正在使用Visual Studio Express 2013中的MVC5应用程序。
54.34.23
真的是一个数字,或者我必须对TryParse
执行其他操作,以便在给出上述输入时返回false。
添加更多细节1.2.3.4
也会返回true。
if (!double.TryParse(setValue.Value, out val))
{
ModelState.AddModelError("Value", "Value can only be a number");
return View(setValue);
}
答案 0 :(得分:5)
您是否考虑过实际测试TryParse()
以查看它给您带来的结果。我刚刚在这里测试了它,并在main()
...
double x;
Console.WriteLine("Parse: {0}", double.TryParse("54.34.23", out x).ToString());
Console.WriteLine("Value: {0}", x);
...给出结果......
Parse: False
Result: 0
由于我得到了不同的结果,似乎我们(正如Ewan在评论中指出的)本地化问题并要解决此问题,您需要指定您希望的TryParse()
规则通过本地化TryParse()
方法使用(记录在msdn.microsoft.com。)
这需要4个参数,并允许您指定解析器在哪些方面有效(负数,小数点,指数等)方面的工作方式。
答案 1 :(得分:4)
如果您的线程文化允许"。"千位分离器" 54.34.23"将解析为543423
[TestMethod]
public void TestMethod1()
{
string n = "54.34.23";
double d1;
double d2;
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
bool test = double.TryParse(n, out d1);
Console.WriteLine("test : " + test);
Console.WriteLine("d1 : " + d1);
}
然而!!!我不确定这是你的问题。我建议你为你的代码写一个UNIT TEST !!你可能会发现其他事情正在发生