BigDecimal
1.把其他类型转换为BigDecimal
BigDecimal.valueOf(需要转换的参数);
BigDecimal blanceTotal = goldCoinBankDTO.getBlanceTotal(); // 总金额
int periodsNum = goldCoinBankDTO.getPeriodsNum(); // 期数
BigDecimal dayReleaseRate = goldCoinBankDTO.getDayReleaseRate(); // 释放速率
dayReleaseAmount = blanceTotal.divide(BigDecimal.valueOf(periodsNum), 2, BigDecimal.ROUND_DOWN)
.multiply(dayReleaseRate);
2.BigDecimal的计算
举例:
BigDecimal bd1 = new BigDecimal(50);
BigDecimal bd2 = new BigDecimal(100);
BigDecimal bd3 = new BigDecimal(150);
加法:
BigDecimal result = bd1.add(bd2);
减法:
BigDecimal result2 = bd2.subtract(bd1);
乘法:
BigDecimal result2 = bd2.multiply(bd1);
除法:
BigDecimal result2 = bd3.divide(bd1);
3.BigDecimal取整说明
BigDecimal blanceTotal = goldCoinBankDTO.getBlanceTotal(); // 总金额
int periodsNum = goldCoinBankDTO.getPeriodsNum(); // 期数
BigDecimal dayReleaseRate = goldCoinBankDTO.getDayReleaseRate(); // 释放速率
int cycleType = goldCoinBankDTO.getCycleType(); // 1-一次性领取;2-周期领取;3-等额领取
log.info("blanceTotal = " + blanceTotal + ", periodsNum = " + periodsNum + ", dayReleaseRate = " + dayReleaseRate);
/** 后端重新计算每日释放数量 */
BigDecimal dayReleaseAmount = BigDecimal.ZERO;
// 周期类型默认0;1-一次性领取;2-周期领取;3-等额领取
if (1 == cycleType) {
dayReleaseAmount = blanceTotal;
} else if (2 == cycleType) {
dayReleaseAmount = blanceTotal.divide(BigDecimal.valueOf(periodsNum), 2, BigDecimal.ROUND_DOWN)
.multiply(dayReleaseRate);
// 重新计算期数
periodsNum = blanceTotal.divide(dayReleaseAmount, 0, BigDecimal.ROUND_UP).intValue();
} else if (3 == cycleType) {
dayReleaseAmount = goldCoinBankDTO.getDayReleaseAmount();
periodsNum = blanceTotal.divide(dayReleaseAmount, 0, BigDecimal.ROUND_UP).intValue();
// 重新给期数赋值
goldCoinBankDTO.setPeriodsNum(periodsNum);
}
1.把dayReleaseAmount的值设为零: BigDecimal dayReleaseAmount = BigDecimal.ZERO; 2.把dayReleaseAmount的结果向上取整并保留两位小数 例如结果为3.3333 取整后就是3.33 dayReleaseAmount = blanceTotal.divide(BigDecimal.valueOf(periodsNum), 2, BigDecimal.ROUND_DOWN) 3.把periodsNum 的结果向下取整 例如结果是3.3333 取整后就是3 periodsNum = blanceTotal.divide(dayReleaseAmount, 0, BigDecimal.ROUND_UP).intValue();