在Java中,使用Comparator比较浮点数类型时,需要注意浮点数的精度问题。直接使用Double.compare()方法或者减法操作可能会导致不精确的结果。为了解决这个问题,可以使用以下方法:
Double.compare()方法:import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
Double[] numbers = {1.23, 3.45, 2.34, 1.98};
Arrays.sort(numbers, Comparator.naturalOrder());
System.out.println(Arrays.toString(numbers));
}
}
Math.abs()方法比较两个浮点数的差值是否小于一个很小的阈值(例如1e-9):import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
Double[] numbers = {1.23, 3.45, 2.34, 1.98};
Arrays.sort(numbers, new Comparator<Double>() {
private static final double EPSILON = 1e-9;
@Override
public int compare(Double a, Double b) {
if (Math.abs(a - b) < EPSILON) {
return 0;
} else if (a < b) {
return -1;
} else {
return 1;
}
}
});
System.out.println(Arrays.toString(numbers));
}
}
BigDecimal类进行比较:import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
BigDecimal[] numbers = {new BigDecimal("1.23"), new BigDecimal("3.45"), new BigDecimal("2.34"), new BigDecimal("1.98")};
Arrays.sort(numbers, Comparator.naturalOrder());
System.out.println(Arrays.toString(numbers));
}
}
以上方法都可以用来比较浮点数类型,可以根据实际需求选择合适的方法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。