/** * @author bacyang * 默认 保留两位小数,可自定义(decimal) */ public class BigDecimalFormatUtil { private static final String ZERO = ",###"; private static final String TWO = ",###.##"; private static final String FORE = ",###.####"; private static final String SIX = ",###.######"; private static final String DECIMAL_ZERO = "0"; private static final String DECIMAL_TWO = "2"; private static final String DECIMAL_FORE = "4"; private static final String DECIMAL_SIX = "6"; //每3位中间添加逗号的格式化显示 public static String getCommaFormat(BigDecimal value, String decimal) { if (!"".equals(value.toString())) { switch (decimal) { case DECIMAL_ZERO: decimal = ZERO; break; case DECIMAL_TWO: decimal = TWO; break; case DECIMAL_FORE: decimal = FORE; break; case DECIMAL_SIX: decimal = SIX; break; default: decimal = TWO; break; } } return getFormat(decimal, value); } //自定义数字格式方法 public static String getFormat(String style, BigDecimal value) { DecimalFormat df = new DecimalFormat(); df.applyPattern(style);// 将格式应用于格式化器 return df.format(value.doubleValue()); } //校验是否为空 public static String isNull(Object obj) { String string = null == obj ? "" : obj.toString(); return string; } // public static void main(String[] args) { // System.out.println(getCommaFormat(new BigDecimal("123123123.123455"),"-1")); // } // 第二种 // public static void main(String[] args) { // fun("123123123.111234"); // } public static String checkDecimal(String str) { // Pattern compile = Pattern.compile("\\d+\\.\\d+$|-\\d+\\.\\d+$"); String converterStr = ""; // todo 判断是否为小数,进行拆分 if (StringUtils.isNotBlank(str)) { converterStr = converterStr(str); } return converterStr; } private static String converterStr(String string) { String decimal = ""; String str = ""; boolean flag = true; boolean manth = true; if (string.contains("-")) { string = string.replace("-", "").trim(); manth = false; } // 判断是否有小数点 if (string.contains(".")) { String[] arr = string.split("\\."); // 获取小数点后边的数字 decimal = arr[1]; flag = false; // 获取整肃部分 str = arr[0]; } else { str = string; } str = new StringBuffer(str).reverse().toString();// 先将字符串颠倒顺序 String str2 = ""; int size = (str.length() % 3 == 0) ? (str.length() / 3) : (str.length() / 3 + 1);// 每三位取一长度 if (str.length() < 3) { // 判断字符串的长度是否大于3 str2 = str; } else { /* * 比如把一段字符串分成n段,第n段可能不是三个数,有可能是一个或者两个, * 现将字符串分成两部分。一部分为前n-1段,第二部分为第n段。前n-1段,每一段加一","而第n段直接取出即可 */ for (int i = 0; i < size - 1; i++) {// 前n-1段 str2 += str.substring(i * 3, i * 3 + 3) + ","; } for (int i = size - 1; i < size; i++) {// 第n段 str2 += str.substring(i * 3, str.length()); } } str2 = new StringBuffer(str2).reverse().toString();// 再将字符串颠倒顺序 // 拼接负号 if (!manth) { String temp="-"; // 拼接小数和小数点 if (flag) { return temp.concat(str2); } return temp.concat(str2.concat(".").concat(decimal)); } if (flag) { return str2; } return str2.concat(".").concat(decimal); } }
调用方式(根据自身情况进行修改): checkDecimal(price!=null?price.setScale(2,BigDecimal.ROUND_HALF_UP).toString():"";