单位转换、保留小数、计算百分比【工具类】
实际开发中,经常会遇到单位转换、保留小数、计算百分比的场景,下面是我自己写的并实际使用的工具类,希望能帮到大家或者给大家参考
该工具类包括:
- 单位转换成万或亿
- 保留两位小数
- 计算百分比,保留两位小数
- 计算百分比,保留两位小数,若有效数字为0,则往后取到第一个不为零的
- 计算百分比,保留整数
public class NumberUtil {
/**
* 转换为亿
* @param amount
* @return
*/
public static BigDecimal formatToYI(BigDecimal amount) {
if (amount == null) {
return new BigDecimal(0);
}
return amount.divide(new BigDecimal(100000000), 2, BigDecimal.ROUND_HALF_UP);
}
/**
* 转换为万
* @param amount
* @return
*/
public static BigDecimal formatToWAN(BigDecimal amount) {
if (amount == null) {
return new BigDecimal(0);
}
return amount.divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP);
}
/**
* 转成万或亿
* @param amount
* @return
*/
public static String formatToWanOrYi(BigDecimal amount) {
if (amount == null) {
return "0";
}
if (amount.compareTo(new BigDecimal(10000000)) < 0) {
//如果小于1亿
return amount.divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString() + "万";
}
return amount.divide(new BigDecimal(100000000), 2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString() + "亿";
}
/**
* 保留两位小数
* @param amount
* @return
*/
public static BigDecimal formatTwo(BigDecimal amount) {
if (amount == null) {
return new BigDecimal(0);
}
return amount.setScale(2, BigDecimal.ROUND_HALF_UP);
}
/**
* 计算百分比 保留两位小数
* @param num1
* @param num2
* @return
*/
public static String getPercent(long num1, long num2) {
String rate = "0.00%";
String format = "0.00";
if (num1 != 0 && num2 != 0) {
DecimalFormat dec = new DecimalFormat(format);
rate = dec.format((double) num1 / num2*100) + "%";
} else if (num1 != 0 && num2 == 0) {
rate = "100.00%";
}
return rate;
}
/**
* 计算百分比 保留两位小数
* @param num1
* @param num2
* @return
*/
public static String getPercent(BigDecimal num1, BigDecimal num2) {
String rate = "0.00%";
String format = "0.00";
if (num1.intValue() != 0 && num2.intValue() != 0) {
DecimalFormat dec = new DecimalFormat(format);
rate = dec.format(num1.divide(num2, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).doubleValue()) + "%";
} else if (num1.intValue() != 0 && num2.intValue() == 0) {
rate = "100.00%";
}
return rate;
}
/**
* 计算百分比,保留两位小数,若有效数字为0,则往后取到第一个不为零的
* @param num1
* @param num2
* @return
*/
public static String getPercentPro(long num1, long num2) {
String rate = "0.00%";
String format = "0.00";
if (num1 != 0 && num2 != 0) {
double v = (double) num1 / num2 * 100;
if (v >= 0.01) {
DecimalFormat dec = new DecimalFormat(format);
rate = dec.format(v) + "%";
} else {
while (true) {
DecimalFormat dec = new DecimalFormat(format);
String format1 = dec.format(v);
if (Double.parseDouble(format1) > 0) {
rate = format1 + "%";
break;
} else {
format = format + "0";
}
}
}
} else if (num1 != 0 && num2 == 0) {
rate = "100.00%";
}
return rate;
}
/**
* 计算百分比 保留整数
* @param num1
* @param num2
* @return
*/
public static String getPercentNoPoint(BigDecimal num1, BigDecimal num2) {
String rate = "0%";
String format = "0";
if (num1.intValue() != 0 && num2.intValue() != 0) {
DecimalFormat dec = new DecimalFormat(format);
rate = dec.format(num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).doubleValue()) + "%";
} else if (num1.intValue() != 0 && num2.intValue() == 0) {
rate = "100%";
}
return rate;
}