检查字符串是否等于double

时间:2018-05-30 05:38:14

标签: c#

String[] vals = s.Split(';');
String o = "X=" + vals[0] + "  Y=" + vals[1] + "  Z=" + vals[2];

我有这段代码来显示x,y,z的值。现在我想实现x,y,z值= 225.0。会发生一些事情。

我不能

double num = 225.0;
if (vals[0] = num ); 

它说,我无法转换' double'到'字符串' 。我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以将vals[0]转换为ConvertToDouble加倍:

double num = 225.0;
if (Convert.ToDouble(vals[0], CultureInfo.InvariantCulture) == num)

如果您想检查vals中的所有值是否等于225.0,您可以使用LINQ All

if (vals.All(x => Convert.ToDouble(x, CultureInfo.InvariantCulture) == num))

<强> DEMO HERE

答案 1 :(得分:0)

你的问题比看起来更复杂。乍一看,“如何比较字符串与浮点数”这一问题的答案是“将字符串转换为浮点数然后比较数字”:

double num = 225.0;
if ( Convert.ToDouble(vals[0]) == num ) {
    // Do something
}

然而,这会导致您可能通过一些广泛的测试捕获的细微错误,但您可能也会错过。原因是浮点数据类型具有精度,并且由于舍入错误,直接相等的比较可能会产生false,即使您期望结果为true。可以找到问题的详细说明以及如何克服它on this site

在您的情况下,您应该考虑一个更简单的解决方案,在实践中可以在许多情况下使用:比较定点数。在.NET框架中,这意味着比较decimal类型的变量:

decimal num = 225M;
if ( Convert.ToDecimal(vals[0]) == num ) {
    // Do something
}

此代码中仍然存在问题,因为转换是基于主机系统的本地文化完成的。通常,您希望根据固定文化进行比较:

decimal num = 225M;
if ( Convert.ToDecimal(vals[0], CultureInfo.InvariantCulture) == num ) {
    // Do something
}

如果由于数据的性质而与小数比较不适合您,则应考虑更复杂的浮点比较,如链接文章中所述。