在我的Linq查询中,我有一个where语句,看起来像这样
&& vio.Bows.Any(nw => nw.XCoordinate.Equals(currVio.XCoordinate)))
值
nw.XCoordinate = 4056.48751252685
currVio.XCoordinate = 4056.488
因此,Equals的声明不起作用,最简单的方法是什么?
public double XCoordinate { get; set; }
答案 0 :(得分:3)
您可以通过计算绝对差异,并将其与较小的值进行比较,使用通常的方式比较double
的邻近度:
Math.Abs(x - y) < 1E-8 // 1E-8 is 0.00000001
例如,您可以在LINQ查询中使用此方法,如下所示:
&& vio.Bows.Any(nw => Math.Abs(nw.XCoordinate-currVio.XCoordinate) < 0.001)
答案 1 :(得分:0)
你也可以使用Math.Round,即:
double x = 4056.48751252685;
var newx = Math.Round(x,3);
所以,如果你知道你总是想要3个小数位,你可以:
&& vio.Bows.Any(nw => Math.Round(nw.XCoordinate,3).Equals(math.Round(currVio.XCoordinate,3))))
您可以更进一步实现IEquetable,并覆盖equals函数,确定两个值中的哪一个具有最小的小数位数,将两者都舍入到该值并进行比较。