gpt4 book ai didi

java - BigDecimal 除法、舍入和求和

转载 作者:行者123 更新时间:2023-11-30 03:33:46 27 4
gpt4 key购买 nike

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

我的两个问题是:

  • 如何舍入到最接近的 5(或任何其他整数)的倍数?
  • 6 个汇率的总和是否会始终给出原始货币金额,还是会因除法而导致精度出现问题?

(这是一个简化的示例,我确实意识到在此设置下最后的汇率可能为负。)

* 更新问题 *

示例的预期结果是:

  • 价格 1-5:110.00
  • 评分 6:100.30在本例中:5*110.00 + 100.30 = 650.30

通过使用指定的方法,所有费率的总和是否总是等于初始金额?

最佳答案

使用除法、舍入、乘法的标准方法

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

关于java - BigDecimal 除法、舍入和求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463752/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com