BigDecimal 除法、舍入和求和

BigDecimal division, rounding and sums

我正在使用代表货币金额的 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"));

我的 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

根据我对要求的理解,我将执行以下计算 rate :

BigDecimal rate = currencyAmount
            .divide(new BigDecimal(numberOfRates * 5), RoundingMode.UP)
            .setScale(0, RoundingMode.UP) 
            .multiply(new BigDecimal(5));