How do I find if two variables are approximately equals?
.net-3.5, c#
Solution
Define a tolerance value (aka an 'epsilon' or 'delta'), for instance, 0.00001, and then use to compare the difference like so:
if (Math.Abs(a - b) < delta)
{
// Values are within specified tolerance of each other....
}
You could use `Double.Epsilon` but you would have to use a multiplying factor.
Better still, write an extension method to do the same. We have something like `Assert.AreSimiliar(a,b)` in our unit tests.
Microsoft's `Assert.AreEqual()` method has an overload that takes a delta: `public static void AreEqual(double expected, double actual, double delta)`
NUnit also provides an overload to their `Assert.AreEqual()` method that allows for a delta to be provided.
Problem
I am writing unit tests that verify calculations in a database and there is a lot of rounding and truncating and stuff that mean that sometimes figures are slightly off. When verifying, I'm finding a lot of times when things will pass but say they fail - for instance, the figure will be 1 and I'm getting 0.999999 I mean, I could just round everything into an integer but since I'm using a lot of randomized samples, eventually i'm going to get something like this 10.5 10.4999999999 one is going to round to 10, the other will round to 11. How should I solve this problem where I need something to be approximately correct?