我正在处理代表货币金额的BigDecimal值。我需要将这个数额分成6个利率,前5个利率被四舍五入到第5个,第6个利率将是剩下的。
BigDecimal numberOfRates = new BigDecimal("6");
BigDecimal currencyAmount = new BigDecimal("650.30");
BigDecimal rate = currencyAmount.divide(numberOfRates);
rate = //rate rounded up to closest multiple of 5
BigDecimal lastRate = currencyAmount.subtract(rate.multiply(new BigDecimal("5"));
我的两个问题是:
(这是一个简化的例子,我确实意识到这个设置的最后一个速率可能是负的。)
*更新问题*
示例的预期结果是:
通过使用指示的方法,所有费率的总和是否等于初始数量?
答案 0 :(得分:2)
使用划分,舍入,乘法的标准方法
private static BigDecimal round(BigDecimal input, int multiple) {
return input.divide(new BigDecimal(multiple))
.setScale(0, RoundingMode.CEILING)
.multiply(new BigDecimal(multiple));
}
for (double i = 0; i < 10; i += 0.9) {
System.out.println(String.format("%.1f => %s", i, round(new BigDecimal(i), 5)));
}
输出
0.0 => 0
0.9 => 5
1.8 => 5
2.7 => 5
3.6 => 5
4.5 => 5
5.4 => 10
6.3 => 10
7.2 => 10
8.1 => 10
9.0 => 10
9.9 => 10
答案 1 :(得分:0)
根据我对要求的理解,我会在计算rate
:
BigDecimal rate = currencyAmount
.divide(new BigDecimal(numberOfRates * 5), RoundingMode.UP)
.setScale(0, RoundingMode.UP)
.multiply(new BigDecimal(5));