在我的 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; }
您可以使用通常的方法来比较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)
您也可以使用 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 函数,确定两个值中的哪一个具有最少的小数位数,将两者舍入到该值并进行比较。