字符串比较双?

时间:2012-07-24 23:18:20

标签: c# linq double

嗨我想尝试在我的网络服务中为某些事情做一个字符串匹配但是我在比较一个双重

public List<Customers> GetCustomer(string anything)
{
    List<Customers> customers = customermembers.Where(n =>
    string.Equals(n.CustomerID, anything, StringComparison.CurrentCultureIgnoreCase)
    || string.Equals(n.FirstName, anything, StringComparison.CurrentCultureIgnoreCase)
    || string.Equals(n.LastName, anything, StringComparison.CurrentCultureIgnoreCase)
    || double.Equals(n.Age, anything, StringComparison.CurrentCultureIgnoreCase) //this like
    ).ToList();
    return customers;
}

你如何比较双倍?

我的DataContract看起来像这样:

[DataMember(Name = "Age")]
public double Age { get; set; }

7 个答案:

答案 0 :(得分:1)

像这样的东西

public bool DoubleEqualsString(double doubleValue, string stringValue)
{
    double convertedValue;
    if (Double.TryParse(stringValue, out convertedValue))
        return convertedValue == doubleValue;

    return false;
}

答案 1 :(得分:1)

替换:

double double1 = Age;

string double1 = Age.ToString();

然后在你的比较中使用:

string.Equals(double1, anything, StringComparison.CurrentCultureIgnoreCase) 

答案 2 :(得分:1)

  

你如何比较双倍?

我假设您要比较两个代表年龄的双重值,而anything确实不是string而是double(这个问题有点难以理解,因为使用anything的方式没有多大意义。)

您可以做的最好的事情是将Age的类型从double切换为decimal(如果年龄是整数,则更好int)。这样做可以避免舍入错误。

但是,如果您想坚持使用浮点数,只需使用double比较两个==值:

a == b

或使用静态object.Equals方法:

Equals(a, b)

如果您对年龄进行计算,您可能会遇到舍入问题,然后您将不得不使用一个小的 epsilon 值来表示您想要使用的舍入精度:

const double Epsilon = 0.0000000001;
var areEqual = Math.Abs(a - b) < Epsilon;

答案 3 :(得分:0)

在进行比较之前将double转换为String。试试这个:将查询的最后一行替换为

|| String.Equals(SqlFunctions.StringConvert(n.Age), anything, StringComparison.CurrentCultureIgnoreCase) 

答案 4 :(得分:0)

如何创建一个尝试将字符串解析为double并返回-1以表示“没有运气”的函数?

 public double ParseAge(string age){
      double parsedAge = -1;
      Double.TryParse(age, out parsedAge);
      return parsedAge;
 }

 public List<Customers> GetCustomer(string anything)
 {
    double double1 = Age;
    List<Customers> customers = customermembers.Where(n =>
                                       string.Equals(n.CustomerID, anything, StringComparison.CurrentCultureIgnoreCase)
                                       || string.Equals(n.FirstName, anything, StringComparison.CurrentCultureIgnoreCase)
                                       || string.Equals(n.LastName, anything, StringComparison.CurrentCultureIgnoreCase)
                                       || n.Age == ParseAge(anything) //this like
                                   ).ToList();
    return customers;
 }

答案 5 :(得分:0)

请使用Double.TryParse方法将字符串转换为double,然后您可以使用==运算符进行比较

答案 6 :(得分:0)

在使用它进行比较之前,我肯定会将字符串转换为双字符串。

进一步加倍.Equals有点棘手,因为这个方法会处理数字逗号之后的确切位数,这意味着

double d1 = 0.33333d;
double d2 = 1/3;

bool result = double.Equals(d1, d2);

显然是假的,尽管你期望它们是平等的。

为了避免这个问题,我会用逗号后的较高位数修剪双精度到逗号后面的数字较少的数字。

E.g:

double d1 = 0.167832;
double d2 = 0.1564;

会融入

double d1 = 0.1678
double d2 = 0.1564

现在你可以比较它们而不用担心。