我刚刚读了一篇关于浮点值比较的声明
浮点值不得使用 == 或 != 进行比较
运营商。
大多数浮点值没有精确的二进制表示,并且有一个
精度有限。
如果是这样,比较两个浮点值的最佳方法是什么?
以下扩展方法可能有助于实现 Kevin 的建议:
public static bool IsEqualTo(this double a, double b, double margin)
{
return Math.Abs(a - b) < margin;
}
public static bool IsEqualTo(this double a, double b)
{
return Math.Abs(a - b) < double.Epsilon;
}
所以现在你可以这样做:
if(x1.IsEqualTo(x2)) ...
if(x1.IsEqualTo(x2, 0.01)) ...
只需更改IsEqualTo
更改为更合适的名称,或将默认边距更改为比double.Epsilon
, 如果需要的话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)