可以使用BigDecimal类来处理精度问题,先把浮点数转成BigDecimal类型,然后进行排序,最后再转回浮点数类型。具体实现可以参考以下示例代码:
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Comparator;
public class PrecisionSortDemo {
public static void main(String[] args) {
double[] nums = new double[] {1.345, 2.236, 3.781, 0.986};
int precision = 2; // 保留两位小数
BigDecimal[] decimals = new BigDecimal[nums.length];
for (int i = 0; i < nums.length; i++) {
decimals[i] = BigDecimal.valueOf(nums[i]);
}
Arrays.sort(decimals, new BigDecimalComparator(precision));
for (int i = 0; i < decimals.length; i++) {
nums[i] = decimals[i].doubleValue();
}
System.out.println(Arrays.toString(nums)); // [0.99, 1.35, 2.24, 3.78]
}
private static class BigDecimalComparator implements Comparator<BigDecimal> {
private int precision;
public BigDecimalComparator(int precision) {
this.precision = precision;
}
@Override
public int compare(BigDecimal o1, BigDecimal o2) {
return o1.setScale(precision, BigDecimal.ROUND_HALF_UP)
.compareTo(o2.setScale(precision, BigDecimal.ROUND_HALF_UP));
}
}
}