Miguel Moura
Miguel Moura

Reputation: 39394

Comparer for Double and Decimal

I created the following Double comparer to compare 2 doubles with precision:

  class DoubleComparer : IEqualityComparer<Double> {

    private readonly int _precision;

    public DoubleComparer(int precision)
    {
        _precision = precision;
    }

    public bool Equals(double x, double y)
    {
        return Double.Equals(Math.Round(x, _precision), Math.Round(y, _precision));
    }

    public int GetHashCode(double obj)
    {
       return obj.GetHashCode();
    }

  }

I would also like to compare Decimals.

Can I create one Comparer that could handle Double and Decimal?

Or do I need two?

Upvotes: 0

Views: 229

Answers (1)

Kit
Kit

Reputation: 21709

You can just implement more than one interface. For example:

class DecimalAndDoubleComparer : IEqualityComparer<Double>, IEqualityComparer<decimal>
{

    private readonly int _precision;

    public DecimalAndDoubleComparer(int precision)
    {
        _precision = precision;
    }

    public bool Equals(double x, double y)
    {
        return Math.Round(x, _precision) == Math.Round(y, _precision);
    }

    public int GetHashCode(double obj)
    {
        return obj.GetHashCode();
    }

    public bool Equals(decimal x, decimal y)
    {
        return Math.Round(x, _precision) == Math.Round(y, _precision);
    }

    public int GetHashCode(decimal obj)
    {
        return obj.GetHashCode();
    }
}

Upvotes: 1

Related Questions