package com.hdkj.lt.utils.math;

import org.apache.commons.lang3.ArrayUtils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Objects;

/**
 * @Description:
 * @Author: wenhao
 * @Create: 2022/10/28 18:59
 * @Version: 1.0
 */
public class DecimalUtils {

    private DecimalUtils() {
    }

    /**
     * 加法计算（result = x + y）
     *
     * @param x 被加数（可为null）
     * @param y 加数（可为null）
     * @return 和（可为null）
     */
    public static BigDecimal add(BigDecimal x, BigDecimal y) {
        if (Objects.isNull(x)) {
            return y;
        }
        if (Objects.isNull(y)) {
            return x;
        }
        return x.add(y);
    }

    /**
     * 加法计算
     *
     * @param nums 可变参，可以是任意个数字相加
     * @return
     */
    public static BigDecimal add(BigDecimal... nums) {
        BigDecimal result = null;
        if (ArrayUtils.isEmpty(nums)) {
            return result;
        }
        for (BigDecimal num : nums) {
            result = add(result, num);
        }
        return result;
    }

    /**
     *
     * @author luorui
     * @date 2025/5/14 18:55
     * @discription  除法
     * @param divisor 除数
     * @param dividend 被除数
     * @param reserve 保留小数位
     * @param roundingMode 进位模式
     *
     **/
    public static BigDecimal divide(BigDecimal divisor, BigDecimal dividend, int reserve, RoundingMode roundingMode) {
        BigDecimal result = divisor.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : dividend.divide(divisor, reserve, roundingMode);
        return result;
    }

}
