P2P利息计算工具

/**
 * 计算器。
 *
 * <p>
 *     用于计算投资相关的积分,本金利息等。
 * </p>
 *
 * 
 */
public final class Calculator {

    /**
     * 计算一次性还款按天计息的利息。
     *
     * <p>
     *     OOBD=ONCE_OFF_BY_DAY,参照{@link RepaymentType#ONCE_OFF_BY_DAY}。
     * </p>
     *
     * @param amount        投资金额。
     * @param rateOfDay    项目(天)利率。
     * @param days          项目期限(天数)。
     * @return 利息值。
     */
    public static BigDecimal calculateInterestWithOOBDBy(BigDecimal amount, BigDecimal rateOfDay, int days) {
        return amount.multiply(rateOfDay).multiply(new BigDecimal(days)).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
    }

    /**
     * 计算按月还款的分期利息。
     *
     * @param amount        投资金额。
     * @param rateOfYear    项目年利率。
     * @param term          项目期限。
     * @param sequence      当前期数。
     * @return 利息值。
     */
    public static BigDecimal calculateInterestForMonthBy(BigDecimal amount, BigDecimal rateOfYear, int term, int sequence) {
        BigDecimal monthRate = getRateOfMonth(rateOfYear);
        BigDecimal pow1 = BigDecimal.valueOf(Math.pow(BigDecimal.ONE.add(monthRate).doubleValue(), term));
        BigDecimal pow2 = BigDecimal.valueOf(Math.pow(BigDecimal.ONE.add(monthRate).doubleValue(), sequence - 1));

        return amount.multiply(monthRate).multiply(pow1.subtract(pow2)).divide(pow1.subtract(BigDecimal.ONE), 2, BigDecimal.ROUND_HALF_EVEN);
    }

    /**
     * 计算按月还款的分期本金。
     *
     * @param amount        投资金额。
     * @param rateOfYear    项目年利率。
     * @param term          项目期限。
     * @return 利息值。
     */
    public static BigDecimal calculateCapitalForMonthBy(BigDecimal amount, BigDecimal rateOfYear, int term) {
        BigDecimal monthRate = getRateOfMonth(rateOfYear);
        BigDecimal pow = BigDecimal.valueOf(Math.pow(BigDecimal.ONE.add(monthRate).doubleValue(), term));

        return amount.multiply(monthRate).multiply(pow).divide(pow.subtract(BigDecimal.ONE), 2, BigDecimal.ROUND_HALF_EVEN);
    }

    /**
     * 计算借款手续费。
     *
     * @param repaymentType 还款方式。
     * @param limitCategory 额度类型。
     * @param subjectAmount 项目金额。
     * @param term          项目期限。
     * @return 借款手续费。
     */
    public static BigDecimal calculateCommissionChargeBy(int repaymentType, int limitCategory, BigDecimal subjectAmount, int term) {
        BigDecimal poundageAmount = BigDecimal.ZERO;
        if (repaymentType == RepaymentType.ONCE_OFF_BY_DAY.getType()) { //天标借款天数不足5天按5天计算。
            poundageAmount = subjectAmount.multiply(new BigDecimal(term <= 5 ? 5 : term)).divide(new BigDecimal("10000"), 2, BigDecimal.ROUND_HALF_EVEN);
        } else {
            BigDecimal loanRate = new BigDecimal("0.005");
            if (limitCategory == LimitCategory.NET_VALUE.getType()) {   //净值。
                loanRate = new BigDecimal("0.00175");
            } else if (limitCategory == LimitCategory.ASSETS_LIMIT.getType()) { // 资产标
                loanRate = new BigDecimal("0.0025");
            }

            poundageAmount = subjectAmount.multiply(new BigDecimal(term)).multiply(loanRate).setScale(2, BigDecimal.ROUND_HALF_EVEN);
        }
        return poundageAmount;
    }

    /**
     * 根据年化利率(百分比)获取月化利率,保留7位小数位。
     *
     * @param rateOfYear 年化利率(百分比)。
     * @return 月化利率。
     */
    public static BigDecimal getRateOfMonth(BigDecimal rateOfYear) {
        return rateOfYear.multiply(new BigDecimal("0.01")).divide(new BigDecimal("12"), 7, BigDecimal.ROUND_HALF_EVEN);
    }

    /**
     * 根据年化利率(百分比)获取月化利率,保留7位小数位。
     *
     * @param rateOfYear 年化利率(百分比)。
     * @return 月化利率。
     */
    public static BigDecimal getRateOfDay(BigDecimal rateOfYear) {
        return rateOfYear.multiply(new BigDecimal("0.01")).divide(new BigDecimal("365"), 7, BigDecimal.ROUND_HALF_EVEN);
    }
}

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值