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

本文关键字:int float double 类型 net 数字 比较 | 更新日期: 2023-09-27 18:06:29

我有一个函数,它接受两个参数,如果它们相等则返回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是两个相等但类型不同的数,它也应该返回true。

例如:

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

我已经找到了一个类似的问题(带答案),最好的方法来比较双精度和整型,但a和b可以是任何类型的数字或其他数字。我怎么检查a和b是不是数字呢?我希望有比检查所有现有的。net数字类型(Int32, Int16, Int64, UInt32, Double, Decimal,…)更好的方法

//update:我设法写了一个工作得很好的方法。但是,十进制类型的数字可能存在一些问题(尚未测试)。但它适用于所有其他数字类型(包括Int64或UInt64的高数值)。如果有人感兴趣:数字相等的代码

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

您可以使用Double。在a和b上都使用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;
}

try this

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;
}