单价一类转换千分位添加逗号

该博客介绍了一个名为`BigDecimalFormatUtil`的工具类,用于将BigDecimal数值格式化为每3位添加逗号的格式,支持自定义小数位数。博客中提供了两种方法实现,包括检查输入字符串是否包含小数并进行转换,以及根据传入的decimal参数决定保留的小数位数。示例代码展示了如何调用这些方法。
摘要由CSDN通过智能技术生成
/**
 * @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():"";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值