Java: Check if two double values match on specific no of decimal places
here is the simple example if you still need this :)
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;
If you want a = 1.00001
and b = 0.99999
be identified as equal:
return Math.abs(a - b) < 1e-4;
Otherwise, if you want a = 1.00010
and b = 1.00019
be identified as equal, and both a
and b
are positive and not huge:
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.
Otherwise, use the truncate
method as shown in Are there any functions for truncating a double in java?:
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);