比较.NET中不同的数字类型(int,float,double,...)

时间:2011-08-24 18:54:53

标签: c# comparison numeric

我有一个带两个参数的函数,如果它们相等则返回true;如果不相等则返回false:

private bool isequal(object a, object b)
{
    if (a != null)
        return a.Equals(b);
    if (b != null)
        return b.Equals(a);
    //if (a == null && b == null)
        return true;
}

现在我想扩展这个功能。如果a和b是2个相等但不同类型的数字,它也应该返回true。

例如:

int a = 15;
double b = 15;
if (isequal(a,b)) //should be true; right now it's false
{ //...
}

我已经找到了一个类似的问题(带答案)best way to compare double and int但是a和b可以是任何类型的数字或其他数字而不是数字。如何检查a和b是否为数字?我希望有一种比检查.net(Int32,Int16,Int64,UInt32,Double,Decimal,...)的所有现有数值类型更好的方法

// 更新:我设法写了一个效果很好的方法。但是,十进制类型的数字可能存在一些问题(尚未测试)。但它适用于所有其他数字类型(包括大量的Int64或UInt64)。如果有人感兴趣:code for number equality

2 个答案:

答案 0 :(得分:3)

您可以在a和b上使用Double.TryParse。它将处理int,long等。

private bool isequal(object a, object b)
{
    if (a == null || b == null)
        return (a == b);

    double da, db;
    if (Double.TryParse(a.ToString(), out da) && Double.TryParse(b.ToString(), out db))
        return YourIsDoubleEqualEnough(da, db);

    return false;
}

答案 1 :(得分:0)

试试这个

private bool isequal(object a, object b)
{
int c,d;
        if (int.TryParse(a.ToString(), out c) && int.TryParse(b.ToString(), out d))
        {
            if (c == d)
                return true;
        }
if (a != null)
    return a.Equals(b);
if (b != null)
    return b.Equals(a);
//if (a == null && b == null)
    return true;
}