分子分母计算工具类

java计算百分比值的方法,涉及java数值运算的技巧

分子作被除数,分母作除数(分母不为0),运算结果和整数一起对应全部有理数

BigDecimalUtil工具类

import java.math.BigDecimal;

public class BigDecimalUtil {

    private BigDecimalUtil() {
    }


    private static final int ZERO = 0;


    /**
     * @param value1 金额
     * @return boolean
     * @dis 判断金额是否小于0
     */
    public static Boolean isSmallZero(BigDecimal value1) {
        return getNotNullValue(value1).compareTo(new BigDecimal(ZERO)) < ZERO;

    }

    /**
     * @param value1 金额
     * @return boolean
     * @dis 判断金额是否大于0
     */
    public static Boolean isBigZero(BigDecimal value1) {
        return getNotNullValue(value1).compareTo(new BigDecimal(ZERO)) > ZERO;

    }

    /**
     * 保证金额不为空
     */
    public static BigDecimal getNotNullValue(BigDecimal value) {
        return null == value ? new BigDecimal(ZERO) : value;
    }

    /**
     * 提供精确的加法运算。
     *
     * @param v1 被加数
     * @param v2 加数
     * @return 二个参数的和
     */
    public static BigDecimal add(BigDecimal v1, BigDecimal v2) {
        return getNotNullValue(v1).add(getNotNullValue(v2));

    }

    /**
     * 提供精确的加法运算。
     *
     * @param v1 被加数
     * @param v2 加数
     * @param v3 加数
     * @return 三个参数的和
     */
    public static BigDecimal add(BigDecimal v1, BigDecimal v2, BigDecimal v3) {
        return getNotNullValue(v1).add(getNotNullValue(v2).add(getNotNullValue(v3)));

    }


    /**
     * 提供精确减法运算的sub方法(例:1-2,1是被减数,2是减数)
     *
     * @param value1 被减数
     * @param value2 减数
     * @return 两个参数的差
     */
    public static BigDecimal subtract(BigDecimal value1, BigDecimal value2) {
        return getNotNullValue(value1).subtract(getNotNullValue(value2));
    }


    /**
     * 提供精确乘法运算的mul方法(例:1*2,1是被乘数,2是乘数)
     *
     * @param value1 被乘数
     * @param value2 乘数
     * @return 两个参数的积
     */
    public static BigDecimal multiply(BigDecimal value1, BigDecimal value2) {
        return getNotNullValue(value1).multiply(getNotNullValue(value2));
    }

    /**
     * 提供精确的除法运算方法div(例:1÷2,1是被除数,2是除数)
     *
     * @param value1 被除数
     * @param value2 除数
     * @param scale  精确范围
     * @return 两个参数的商
     * @throws IllegalAccessException
     */
    public static BigDecimal divide(BigDecimal value1, BigDecimal value2, int scale) {
        return value1.divide(value2, scale, BigDecimal.ROUND_HALF_UP);
    }
}

百分比计算工具类

import java.math.BigDecimal;

/**
 * @author liuminglin
 * @Date 2021/10/13 18:43
 * @Desc 百分比计算工具类
 */
public class PercentageUtil {


    /**
     * 百分比
     */
    public static final int PERCENTAGE = 100;


    private PercentageUtil() {
    }


    /**
     * 计算分母
     * 分母计算规则:求和 value1+value2
     * value1 计算百分比的字段
     * value2 计算百分比的字段
     */
    public static BigDecimal getDenominator(long value1, long value2) {
        return BigDecimalUtil.add(new BigDecimal(value1), new BigDecimal(value2));
    }

    /**
     * 计算分母
     * 分母计算规则:求和 value1+value2
     * value1 计算百分比的字段
     * value2 计算百分比的字段
     */
    public static BigDecimal getDenominator(String value1, String value2) {
        return BigDecimalUtil.add(new BigDecimal(value1), new BigDecimal(value2));
    }


    /**
     * 计算分母
     */
    public static BigDecimal getDenominator(long value1, long value2, long value3) {
        return BigDecimalUtil.add(new BigDecimal(value1), new BigDecimal(value2), new BigDecimal(value3));
    }

    /**
     * 计算分母
     */
    public static BigDecimal getDenominator(String value1, String value2, String value3) {
        return BigDecimalUtil.add(new BigDecimal(value1), new BigDecimal(value2), new BigDecimal(value3));
    }

    /**
     * 计算分母
     * 分母计算规则:求和:args值相加
     * ...args {多个可变参数:计算百分比的字段}
     */
    public static BigDecimal getDenominator1(String... args) {
        BigDecimal denominator = BigDecimal.ZERO;
        for (String arg : args) {
            denominator = denominator.add(new BigDecimal(arg));
        }
        return denominator;
    }


    /**
     * @author
     * @Date 2021/10/13 11:45
     * @Desc 获取计算百分比
     * @Param molecular :分子
     * @Param denominator 分母
     * @Return 返回百分比
     * 分子:计算百分比的字段
     * 分母计算规则:求和
     * 百分比计算规则:拿分子乘以100/分母
     */
    public static BigDecimal getComputePercent(long numerator, long denominator, int scale) {
        BigDecimal result = new BigDecimal(numerator).multiply(new BigDecimal(100))
            .divide(new BigDecimal(denominator), scale, BigDecimal.ROUND_HALF_UP);
        return result;
    }


    /**
     * @author
     * @Date 2021/10/13 11:45
     * @Desc 获取计算百分比
     * @Param molecular :分子
     * @Param denominator 分母
     * @Param scale .数点精确到几位
     * @Return 返回百分比
     * 分子:计算百分比的字段
     * 分母计算规则:求和
     * 百分比计算规则:拿分子乘以100/分母
     */
    public static BigDecimal getComputePercent(String numerator, String denominator, int scale) throws IllegalAccessException {
        BigDecimal result = BigDecimalUtil.multiply(new BigDecimal(numerator), new BigDecimal(PERCENTAGE));
        return BigDecimalUtil.divide(result, new BigDecimal(denominator), scale);
    }


    public static void main(String[] args) throws IllegalAccessException {

        //分母1
        BigDecimal sum = getDenominator("298", "34123", "65789");


        //百分比1
        BigDecimal percentt1 = getComputePercent("298", sum.toString(), 2);
        BigDecimal percentt2 = getComputePercent("34123", sum.toString(), 2);
        BigDecimal percentt3 = getComputePercent("65789", sum.toString(), 2);

        System.out.println(percentt1 + "%");
        System.out.println(percentt2 + "%");
        System.out.println(percentt3 + "%");


        BigDecimal test = getDenominator1("298", "34123", "65789");

        System.out.println(" 分母1 " + sum);
        System.out.println(" 分母2 " + test);
    }
}

测试结果如下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值