Prevents using `==` and `!=` operators on floats and doubles
ID: csharp-best-practices/float-equality
Language: C#
Severity: Error
Category: Best Practices
Description
Floating point math is inherently imprecise, so checking strict equality to a float
or double
will very likely lead to unexpected bugs.
For example:
Input
var a = 0.1f;
var b = 0.2f;
var c = 0.3f;
Console.WriteLine($"{a + b == c}");
Output
(Note: exact results can vary depending on the compiler used)
Non-Compliant Code Examples
class NonCompliant
{
public static void Main()
{
float foo = 1.2345f;
if (foo == 1.2345f) { /* ... */ }
if (4.567d == 4.567d) { /* ... */ }
if (4.567f != 4.567f) { /* ... */ }
bool isEqual = foo == 1.2345f;
}
}
Compliant Code Examples
class Compliant
{
public static void Main()
{
float foo = 1.2345f;
var tolerance = 0.000000001f;
if (Math.Abs(foo - 1.2345f) < tolerance) { /* ... */ }
}
}
Seamless integrations. Try Datadog Code Analysis