import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class MoneyUtil {
/**
* 金额格式化:
* 1)如有小数点,精确到小数点后2位,四舍五入;
* 2) 没小数点,按整数显示;
* 3)整数部分超过3位的,每三位用半角逗号分割
*
* @param amount
* @return
*/
public static String convert(String amount) {
if (StringUtils.isEmpty(amount)) {
return null;
}
if (amount.contains(".")) {
//先四舍五入,避免进位取整
amount = rounding(amount);
if(amount.contains(".")){
String addCommaStr = amount.substring(0, amount.indexOf("."));
String tmpCommaStr = amount.substring(amount.indexOf("."));
return addComma(addCommaStr) + tmpCommaStr;
}else {
return addComma(amount);
}
} else {
return addComma(amount);
}
}
/**
* 科学计数法处理,每三位用半角逗号分割
*
* @param amount
* @return
*/
public static String addComma(String amount) {
String reverseStr = new StringBuilder(amount).reverse().toString();
String strTemp = "";
for (int i = 0; i < reverseStr.length(); i++) {
if (i * 3 + 3 > reverseStr.length()) {
strTemp += reverseStr.substring(i * 3, reverseStr.length());
break;
}
strTemp += reverseStr.substring(i * 3, i * 3 + 3) + ",";
}
if (strTemp.endsWith(",")) {
strTemp = strTemp.substring(0, strTemp.length() - 1);
}
String resultStr = new StringBuilder(strTemp).reverse().toString();
return resultStr;
}
/**
* 四舍五入处理,保留两位小数(.00小数位除外)
*
* @param amount
* @return
*/
public static String rounding(String amount) {
BigDecimal num1 = new BigDecimal(amount);
num1 = num1.setScale(2, RoundingMode.HALF_UP);
BigDecimal num2 = num1.setScale(0,RoundingMode.DOWN);
//如果带小数跟取整相同,则取整,去掉.00小数位
if(num1.compareTo(num2) == 0){
return String.valueOf(num2);
}
return String.valueOf(num1);
}
public static void main(String[] args) {
System.out.println("无小数位:" + convert("321321415"));
System.out.println("小数进位取整:" + convert("321321415.995"));
System.out.println("小数保留两位:" + convert("321321415.994"));
}
}
金额格式化工具类
于 2022-10-26 14:20:04 首次发布