处理点赞和评论的数量时,经常有需求要将过长的数据进行缩减,比如:1945格式化为1.9k,19450格式化为1.9w
功能主要会用到两个函数:
1、判断后端返回的数据是否是数字
public static boolean isNumeric(String str) {
for (int i = str.length(); --i >= 0; ) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
这个功能有其他的实现方法。
2、将数据进行格式化
public static String formatBigNum(String num) {
if (StringUtils.isEmpty(num)) {
// 数据为空直接返回0
return "0";
}
try {
StringBuffer sb = new StringBuffer();
if (!StringUtils.isNumeric(num)) {
// 如果数据不是数字则直接返回0
return "0";
}
BigDecimal b0 = new BigDecimal("1000");
BigDecimal b1 = new BigDecimal("10000");
BigDecimal b2 = new BigDecimal("100000000");
BigDecimal b3 = new BigDecimal(num);
String formatedNum = "";//输出结果
String unit = "";//单位
if (b3.compareTo(b0) == -1) {
sb.append(b3.toString());
} else if ((b3.compareTo(b0) == 0 || b3.compareTo(b0) == 1)
|| b3.compareTo(b1) == -1) {
formatedNum = b3.divide(b0).toString();
unit = "k";
} else if ((b3.compareTo(b1) == 0 && b3.compareTo(b1) == 1)
|| b3.compareTo(b2) == -1) {
formatedNum = b3.divide(b1).toString();
unit = "w";
} else if (b3.compareTo(b2) == 0 || b3.compareTo(b2) == 1) {
formatedNum = b3.divide(b2).toString();
unit = "亿";
}
if (!"".equals(formatedNum)) {
int i = formatedNum.indexOf(".");
if (i == -1) {
sb.append(formatedNum).append(unit);
} else {
i = i + 1;
String v = formatedNum.substring(i, i + 1);
if (!v.equals("0")) {
sb.append(formatedNum.substring(0, i + 1)).append(unit);
} else {
sb.append(formatedNum.substring(0, i - 1)).append(unit);
}
}
}
if (sb.length() == 0)
return "0";
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return num;
}
}