java - 双型比较器

标签 java casting double comparator

我编写了以下代码:

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 的。我该如何解决这个问题?

最佳答案

我建议您使用内置方法 Double.compare()。如果您需要 double 值的范围相等,您可以首先使用 chcek。

return Double.compare(p1.getY(), p2.gety());

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 等于一切。

关于java - 双型比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59094219/

相关文章:

Code::Blocks 无法识别简单 C 程序中的双重标识符 (%lf)

java - 同时支持Oracle和MySQL : how similar is their SQL syntax?

c++ - 为什么类型转换运算符不适用于继承的类?

mysql - 如何在不保存以检查是否与外部 ASCII 字符串匹配的情况下即时将列转换为 ASCII?

java - 如何将表达式中的所有整数文字视为 double ?

swift - 三双哈希值

java - Java 中的自动检测字符编码

java - 如何显示JAVA链表中的对象

java - gwt上传: Set dynamic file upload size

Angular/Typescript - 由于模块定义,无法转换导入的 '*.json' 文件