我编写了以下代码:
public class NewClass2 implements Comparator<Point>
{
public int compare(Point p1, Point p2)
{
return (int)(p1.getY() - p2.getY());
}
}
如果我说有两个双数,3.2 - 3.1
,差异应该是0.1
。然而,当我将数字转换为 int 时,差异最终为0
,这是不正确的。
因此我需要compare()
返回 double,而不是 int。问题是,我的getX
字段是双精度的。我怎么解决这个问题?
我建议您使用内置方法 Double.compare()。如果您需要双值的范围相等,您可以首先使用 chcek 。
return Double.compare(p1.getY(), p2.gety());
or
if(Math.abs(p1.getY()-p2.getY()) < ERR) return 0;
return Double.compare(p1.getY(), p2.gety());
使用 的问题是 NaN 在这两种情况下都会返回 false,从而导致处理可能不一致。例如NaN 被定义为不等于任何东西,甚至不等于它本身,但是在 @suihock 和 @Martinho 的解决方案中,如果任一值为 NaN,则该方法每次都会返回 0,这意味着 NaN 等于一切。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)