• BigDecimal去除末尾多余的0


    Java有自带的 stripTrailingZeros() 方法用于去除末尾多余的0

     BigDecimal num = new BigDecimal("100.000");
     BigDecimal numNoEndZero = num.stripTrailingZeros();  //numNoEndZero  :1E+2
     System.out.println(numNoEndZero.toString());

    按上面的方法输出结果,会显示科学计数法,所以需要处理一下,解决方法:

     String numNoEndZeroStr = new BigDecimal("100.000").stripTrailingZeros().toPlainString();   //numNoEndZeroStr  :100
     System.out.println(numNoEndZeroStr);

    通过该方法处理BigDecimal类型数据后面的0的方法实现:

    /**
         * @Title: clearNoUseZeroForBigDecimal
         * @Description: 去掉BigDecimal尾部多余的0,通过stripTrailingZeros().toPlainString()实现
         * @param num
         * @return BigDecimal
         */
        public static BigDecimal clearNoUseZeroForBigDecimal(BigDecimal num) {
            BigDecimal returnNum = null;
            String numStr = num.stripTrailingZeros().toPlainString();
            if (numStr.indexOf(".") == -1) {
                // 如果num 不含有小数点,使用stripTrailingZeros()处理时,变成了科学计数法
                returnNum = new BigDecimal(numStr);
            } else {
                if (num.compareTo(BigDecimal.ZERO) == 0) {
                    returnNum = BigDecimal.ZERO;
                } else {
                    returnNum = num.stripTrailingZeros();
                }
            }
            return returnNum;
        }

    不通过该方法处理BigDecimal类型数据实现

        /**
         * @Title: removeAmtLastZero
         * @Description: 金额处理,去掉BigDecimal尾部多余的0
         * @param num
         * @return BigDecimal
         */
        public static BigDecimal removeAmtLastZero(BigDecimal num) {
            String strNum = num.toString();
            if (strNum.indexOf('.') != -1) {
                String[] arr = strNum.split("\.");
                String strDecimals = arr[1];
                List<String> list = new ArrayList<String>();
                boolean isCanAdd = false;
                for (int i = strDecimals.length() - 1; i > -1; i--) {
                    String ss = String.valueOf(strDecimals.charAt(i));
                    if (!ss.equals("0")) {
                        isCanAdd = true;// 从最后的字符开始算起,遇到第一个不是0的字符开始都是需要保留的字符
                    }
                    if (!ss.equals("0") || isCanAdd) {
                        list.add(ss);
                    }
                }
                StringBuffer strZero = new StringBuffer();
                for (int i = list.size() - 1; i > -1; i--) {
                    strZero.append(list.get(i));
                }
                strNum = String.format("%s.%s", arr[0], strZero.toString());
            }
    
            return new BigDecimal(strNum);
        }
  • 相关阅读:
    关系数据库&&NoSQL数据库
    NoSQL
    大数据时代的数据存储,非关系型数据库MongoDB
    判断是否为BST
    百度2017暑期实习生编程题
    memset()实现及细节
    在必须返回一个对象时,不要去尝试返回一个引用
    返回局部变量指针
    用引用返回值
    数组形参
  • 原文地址:https://www.cnblogs.com/zjfjava/p/9931895.html
Copyright © 2020-2023  润新知