/** * 计算器。 * * <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); } }
P2P利息计算工具
猜你喜欢
转载自496677829.iteye.com/blog/2311944
今日推荐
周排行