3

在我的 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; }
4

2 回答 2

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)
于 2013-05-23T01:52:21.787 回答
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 函数,确定两个值中的哪一个具有最少的小数位数,将两者舍入到该值并进行比较。

于 2013-05-23T02:14:41.593 回答