记个小笔记:在数学计算中10 次 0.1 相加应该等于1,但是在计算机中计算并不为1,而是0.99999999999999989。
那么一般的比较方法如“==”、Equals就不适用了。还好双精度计算有个误差值为1E-6;下面附上代码:
public static void Test()
{
double value1 = 0;
double value2 = 1;
for (int i = 0; i < 10; i++)
value1 += 0.1;
DoubleEquals(value1, value2); //value1 = 0.99999999999999989
}
比较方法:
/// <summary>
/// double比较大小
/// </summary>
/// <param name="value1"></param>
/// <param name="value2"></param>
/// <returns></returns>
public static bool DoubleEquals(double value1, double value2)
{
//双精度误差
var DOUBLE_DELTA = 1E-6;
return value1 == value2 || Math.Abs(value1 - value2) < DOUBLE_DELTA;
}