ken*_*ytm 18

如果你想要a = 1.00001并被b = 0.99999认为是平等的:

return Math.abs(a - b) < 1e-4;
Run Code Online (Sandbox Code Playgroud)

否则,如果你想a = 1.00010b = 1.00019被确定为相等,都ab为正,而不是巨大的:

return Math.floor(a * 10000) == Math.floor(b * 10000);
// compare by == is fine here because both sides are integral values.
// double can represent integral values below 2**53 exactly.
Run Code Online (Sandbox Code Playgroud)

否则,使用truncate如下所示的方法是否有任何在java中截断double的函数?:

BigDecimal aa = new BigDecimal(a);
BigDecimal bb = new BigDecimal(b);
aa = aa.setScale(4, BigDecimal.ROUND_DOWN);
bb = bb.setScale(4, BigDecimal.ROUND_DOWN);
return aa.equals(bb);
Run Code Online (Sandbox Code Playgroud)


Nor*_*rby 6

如果您仍然需要这个,这是一个简单的示例:

public static boolean areEqualByThreeDecimalPlaces(double a, double b) {

    a = a * 1000;

    b = b * 1000;

    int a1 = (int) a;

    int b1 = (int) b;

    if (a1 == b1) {
        System.out.println("it works");
        return true;
    }

    else
        System.out.println("it doesn't work");
    return false;
Run Code Online (Sandbox Code Playgroud)


Mic*_*rdt 5

天真:

if(Math.abs(a-b) < 0.0001)
Run Code Online (Sandbox Code Playgroud)

但是,这不会适用于所有值。只要您使用double,实际上就不可能让它工作,因为它double是作为二进制分形实现的,甚至没有小数位。

您必须将您的值转换为StringBigDecimal对其小数位进行有意义的测试。

您可能需要阅读浮点指南以提高您对浮点值工作原理的理解。