C# Tip – How to check if two double values are equal

If you’ve worked with variable whose datatypes are “double”, you may have seen a problem when you check if two doubles are equal.

The problem is the way that a double (also called “float”) variable is stored. Doubles sometimes lose accuracy.

So, a variable you think holds “1” actually holds “0.9999999999987423” – or something like that.

Here are two extension methods you can use to compare two double variables, and see if they are “equal enough”.

using System;

namespace Engine
{
    public static class ExtensionMethods
    {
        public static bool IsApproximatelyEqualTo(this double initialValue, double value)
        {
            return IsApproximatelyEqualTo(initialValue, value, 0.00001);
        }

        public static bool IsApproximatelyEqualTo(this double initialValue, double value, double maximumDifferenceAllowed)
        {
            // Handle comparisons of floating point values that may not be exactly the same
            return (Math.Abs(initialValue - value) < maximumDifferenceAllowed);
        }
    }
}

These functions subtract the second value from the first, get the absolute value (converting negative differences to a positive number), and check if the difference between the two numbers is less than a value you consider to be acceptable for declaring the variables “equal”.

Here is how you would use it in your code:

public void Test()
{
    double var1 = 1.0;
    double var2 = 9999999999987423;

    // Default level of accuracy
    if(var1.IsApproximatelyEqualTo(var2))
    {
        // Do stuff
    }

    // Less restrictive level of accuracy
    if(var1.IsApproximatelyEqualTo(var2, 0.01))
    {
        // Do other stuff
    }
}

The default value has always worked for the situations I’ve encountered, but you may see something different in your programs, and want to use your own level of accuracy.

Leave a Reply

Your email address will not be published. Required fields are marked *