1.2.3是双数据类型

时间:2015-10-21 09:11:07

标签: c# parsing

我正在使用Double.TryParse()来查找给定字符串是否为数字。我不知道TryParse是如何运作的。但是当我给出像54.34.23这样的输入时,它返回true。我正在使用Visual Studio Express 2013中的MVC5应用程序。

54.34.23真的是一个数字,或者我必须对TryParse执行其他操作,以便在给出上述输入时返回false。

添加更多细节1.2.3.4也会返回true。

The result that is being displayed

  if (!double.TryParse(setValue.Value, out val))
  {
  ModelState.AddModelError("Value", "Value can only be a number");
  return View(setValue);
  }

2 个答案:

答案 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 !!你可能会发现其他事情正在发生