Java坡度在应该相等时不相等

Java坡度在应该相等时不相等,java,eclipse,Java,Eclipse,我正在做一个程序,找到两个斜坡,然后比较它们,看它们是否相等。我用双人的。我发现,即使我的坡度应该是“相等”的,但它们还是有点偏了,所以没有表现出相等。例如,我得到一个斜率1.0000000000000009和0.99999999999。所以理论上他们应该是平等的,但事实并非如此 我能做些什么来解决这个问题 如果您使用的是双精度运算,您将永远无法解决这一问题:十进制数的表示方式存在限制,这些限制会在您的计算中累积,并给您带来这些微小的差异。一个好的代码审计实际上会提醒您双倍代码之间的相等性 处理

我正在做一个程序,找到两个斜坡,然后比较它们,看它们是否相等。我用双人的。我发现,即使我的坡度应该是“相等”的,但它们还是有点偏了,所以没有表现出相等。例如,我得到一个斜率1.0000000000000009和0.99999999999。所以理论上他们应该是平等的,但事实并非如此


我能做些什么来解决这个问题

如果您使用的是双精度运算,您将永远无法解决这一问题:十进制数的表示方式存在限制,这些限制会在您的计算中累积,并给您带来这些微小的差异。一个好的代码审计实际上会提醒您双倍代码之间的相等性

处理此问题的一种方法是确保差值的绝对值低于您设置的某个限制

浮点数表示和比较的危害


或者,您可以切换到更好的类以进行精确的数字处理,例如
BigDecimal

来比较两个斜率,您可以设置一些精度级别,然后进行如下比较

final double PRECISON_LEVEL = 0.01;
if(Math.abs(slope1 - slope2) < PRECISION_LEVEL) {
    System.out.println("Equal");
} 
else {
    System.out.println("Not Equal");
}
最终双精度水平=0.01;
if(数学绝对值(斜率1-斜率2)<精度水平){
系统输出打印项次(“相等”);
} 
否则{
System.out.println(“不相等”);
}

步骤#1:向我们展示代码。我认为这可能是精度问题。通常情况下,在浮点数和双倍点数上操作时,会丢失一点精度。我认为这将帮助您解决问题:这是一个浮点FAQ。在谷歌搜索Java double comparison时会出现大量重复项:…BigDecimal在两种情况下优于double:如果十进制分数是特殊的,或者如果有合适的有限精度大于double提供的精度。计算斜率可能涉及分数,例如1/3,这些分数在BigDecimal中无法精确表示,无论比例如何,都会导致舍入误差。