2 回答
TA贡献1865条经验 获得超7个赞
您知道 的结果将始终除以 和 。因此,您可以将公式的这些静态部分保存在变量中。balance * interest rate
100
12
static
private static final BigDecimal MONTH_IN_PERCENT = BigDecimal.valueOf(100 * 12);
然后在计算中使用它:
return BigDecimal.valueOf(bal).multiply(BigDecimal.valueOf(rate).divide(MONTH_IN_PERCENT).doubleValue();
如果您可以保证 ,则可以使用此版本:bal * rate <= Long.MAX_VALUE
return BigDecimal.valueOf((long) bal * rate).divide(MONTH_IN_PERCENT).doubleValue();
TA贡献1783条经验 获得超4个赞
我强烈建议您增加一些精确度。否则,您可能会得到一些声明,即没有提供确切的精度。BigDecimalArithmeticException
执行类似操作
public static double calculateMonthlyInterest(BigDecimal balance, BigDecimal rate,
BigDecimal hundred, BigDecimal month) {
return balance.multiply(rate)
.divide(hundred, 2, BigDecimal.ROUND_HALF_UP)
.divide(month, 2, BigDecimal.ROUND_HALF_UP)
.doubleValue();
}
或者这个(如果你想提供参数):double
public static double calculateMonthlyInterest(double balance, double rate,
double hundred, double month) {
BigDecimal b = new BigDecimal(balance);
BigDecimal r = new BigDecimal(rate);
BigDecimal h = new BigDecimal(hundred);
BigDecimal m = new BigDecimal(month);
return b.multiply(r)
.divide(h, 2, BigDecimal.ROUND_HALF_UP)
.divide(m, 2, BigDecimal.ROUND_HALF_UP)
.doubleValue();
}
这样,代码保持可读性,但这需要一定的价格:有更多的代码行!
添加回答
举报