public static String getPercentile(double[] array, double percentile, int digit) {
if (array == null || array.length == 0) {
return null;
}
if (array.length == 1) {
return new BigDecimal(String.valueOf(array[0])).setScale(digit, BigDecimal.ROUND_HALF_EVEN).stripTrailingZeros().toPlainString();
}
Arrays.sort(array);
BigDecimal x = new BigDecimal(array.length - 1).multiply(new BigDecimal(String.valueOf(percentile)));
int i = x.intValue();
BigDecimal j = x.subtract(new BigDecimal(i));
BigDecimal r = (new BigDecimal(1).subtract(j)).multiply(new BigDecimal(String.valueOf(array[i]))).add(j.multiply(new BigDecimal(String.valueOf(array[i + 1]))));
return r.setScale(digit, BigDecimal.ROUND_HALF_EVEN).stripTrailingZeros().toPlainString();
}