有没有一种更干净/更简单的方法来在代码中编写这个公式?

我需要返回一个双精度值。此值派生自此公式。


每月利息 = 余额 * 利率 / 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;


胡子哥哥
浏览 76回答 2
2回答

莫回无

您知道 的结果将始终除以 和 。因此,您可以将公式的这些静态部分保存在变量中。balance * interest rate10012staticprivate&nbsp;static&nbsp;final&nbsp;BigDecimal&nbsp;MONTH_IN_PERCENT&nbsp;=&nbsp;BigDecimal.valueOf(100&nbsp;*&nbsp;12);然后在计算中使用它:return&nbsp;BigDecimal.valueOf(bal).multiply(BigDecimal.valueOf(rate).divide(MONTH_IN_PERCENT).doubleValue();如果您可以保证 ,则可以使用此版本:bal * rate <= Long.MAX_VALUEreturn&nbsp;BigDecimal.valueOf((long)&nbsp;bal&nbsp;*&nbsp;rate).divide(MONTH_IN_PERCENT).doubleValue();

慕娘9325324

我强烈建议您增加一些精确度。否则,您可能会得到一些声明,即没有提供确切的精度。BigDecimalArithmeticException执行类似操作public static double calculateMonthlyInterest(BigDecimal balance, BigDecimal rate,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;BigDecimal hundred, BigDecimal month) {&nbsp; &nbsp; return balance.multiply(rate)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .divide(hundred, 2, BigDecimal.ROUND_HALF_UP)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .divide(month, 2, BigDecimal.ROUND_HALF_UP)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .doubleValue();}或者这个(如果你想提供参数):doublepublic static double calculateMonthlyInterest(double balance, double rate,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double hundred, double month) {&nbsp; &nbsp; BigDecimal b = new BigDecimal(balance);&nbsp; &nbsp; BigDecimal r = new BigDecimal(rate);&nbsp; &nbsp; BigDecimal h = new BigDecimal(hundred);&nbsp; &nbsp; BigDecimal m = new BigDecimal(month);&nbsp; &nbsp; return b.multiply(r)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .divide(h, 2, BigDecimal.ROUND_HALF_UP)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .divide(m, 2, BigDecimal.ROUND_HALF_UP)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .doubleValue();}这样,代码保持可读性,但这需要一定的价格:有更多的代码行!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java