首页 > 解决方案 > 在代码中编写此公式是否有更清洁/更简单的方法?

问题描述

我需要返回一个双精度值。这个值是从这个公式得出的。

月利率=余额*利率/100.00 /12.0

由于一些精度问题,我将在计算过程中使用 BigDecimal 并返回一个双精度值(因为这就是金钱的表示方式)。

我试过下面的代码,它工作得很好,但如果你问我,它看起来很长而且有点不可读。

double bal = 10, rate=2, hundred = 100.00, month = 12.0;

double monthInt= (BigDecimal.valueOf(bal).multiply(BigDecimal.valueOf(rate)).divide(BigDecimal.valueOf(hundred)).divide(BigDecimal.valueOf(month))).doubleValue();

return monthInt;

标签: javamathdoublebigdecimal

解决方案


你知道 的结果balance * interest rate总是会除以10012。因此,您可以将公式的这些静态部分保存在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();

推荐阅读