java - 在代码中编写此公式是否有更清洁/更简单的方法?
问题描述
我需要返回一个双精度值。这个值是从这个公式得出的。
月利率=余额*利率/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;
解决方案
你知道 的结果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();
推荐阅读
- powershell - powershell - 类 - 在它自己的类中调用构造函数并返回它
- node.js - 为 Dialogflow Skype 集成验证用户身份
- node.js - 是否可以使用 mongoose 从引用对象的数组中提取元素?
- python - PyTest Matplotlib 图出现在节目中
- mongodb - mongodb副本集配置问题
- jquery - 为什么 jQuery 看不到我的插件的方法?
- android - ContentPovider 的 CRUD 操作混乱
- reactjs - 如何绑定对象以在 reactjs 中选择?
- javascript - 根据使用的邀请码给新成员一个角色
- python - 使用 threading.Timer 执行带有条件的函数