CODY

CODY 关注TA

一坑未平,一坑起

CODY

CODY

关注TA

一坑未平,一坑起

  • 加入社区2,875天
  • 写了59,448字

该文章投稿至Nemo社区   Java  板块 复制链接


BigDecimal 类型的计算工具类

发布于 2017/02/28 17:07 1,821浏览 0回复 3,666

import java.math.BigDecimal;

/**

 * 金额转换 处理

 * 

 */

public class BigDecimalUtils {

    public final static BigDecimal PERCENTILE = new BigDecimal("0.01");// 百分比计算值

    /**

     * 可变长度的加法

     * 

     * @param val1

     * @param decimals

     * @return

     */

    public static BigDecimal add(BigDecimal val1, BigDecimal... decimals) {

        if (isNull(val1)) {

            val1 = new BigDecimal(0);

        }

        BigDecimal sum = val1;

        for (BigDecimal decimal : decimals) {

            if (isNull(decimal)) {

                decimal = new BigDecimal(0);

            }

            sum = sum.add(decimal);

        }

        return sum;

    }

    /**

     * 可变长度的减法

     * 

     * @param val1

     * @param decimals

     * @return

     */

    public static BigDecimal subtract(BigDecimal val1, BigDecimal... decimals) {

        if (isNull(val1)) {

            val1 = new BigDecimal(0);

        }

        BigDecimal subtract = val1;

        for (BigDecimal decimal : decimals) {

            if (isNull(decimal)) {

                decimal = new BigDecimal(0);

            }

            subtract = subtract.subtract(decimal);

        }

        return subtract;

    }

    /**

     * 除 val1 / val2

     * 

     * @param val1

     * @param val2

     * @param scale

     * @param roundingMode

     * @return

     */

    public static BigDecimal divide(BigDecimal val1, BigDecimal val2, int scale, int roundingMode) {

        if (isNull(val1) || isZero(val1) || isNull(val2) || isZero(val2)) {

            return new BigDecimal(0);

        }

        return val1.divide(val2, scale, roundingMode);

    }

    /**

     * 可变长度乘法

     * 

     * @param val1

     * @param decimals

     * @return

     */

    public static BigDecimal multiply(BigDecimal val1, BigDecimal... decimals) {

        if (isNull(val1)) {

            val1 = new BigDecimal(0);

        }

        BigDecimal result = val1;

        for (BigDecimal decimal : decimals) {

            if (isNull(decimal)) {

                decimal = new BigDecimal(0);

            }

            result = result.multiply(decimal);

        }

        return result;

    }

    /**

     * 百分比计算

     *

     * @param val

     * @return

     */

    public static BigDecimal percent(BigDecimal val) {

        if (isNull(val)) {

            return BigDecimal.ZERO;

        }

        return PERCENTILE.multiply(val);

    }

    /**

     * 判断是否为null

     * 

     * @param val

     * @return

     */

    public static boolean isNull(BigDecimal val) {

        return null == val;

    }

    public static BigDecimal nullToZero(BigDecimal val) {

        if (isNull(val)) {

            return new BigDecimal(0);

        }

        return val;

    }

    /**

     * 判断是否为0

     * 

     * @param val

     * @return

     */

    public static boolean isZero(BigDecimal val) {

        if (isNull(val)) {

            return true;

        }

        return val.compareTo(new BigDecimal(0)) == 0;

    }

    public static String toString(BigDecimal val) {

        if (val == null) {

            return "0";

        }

        // 去掉多余的0,如0012.0500变成12.05

        return val.stripTrailingZeros().toPlainString();

    }

    public static int compareTo(BigDecimal val1, BigDecimal val2) {

        return nullToZero(val1).compareTo(nullToZero(val2));

    }

}


本文标签
 {{tag}}
点了个评