gpt4 book ai didi

java - 用于财务计算和非终止计算的 Bigdecimal

转载 作者:搜寻专家 更新时间:2023-11-01 01:28:57 26 4
gpt4 key购买 nike

我敢肯定这是一个简单的问题,但我无法在我的一生中决定必须做什么。就是这样:假设我们遵循使用 BigDecimal 进行财务计算的“最佳实践”,那么如何处理抛出异常的东西(计算)?

举个例子:假设,我必须在“n”个不同实体之间拆分“用户金额”以投资债券。现在考虑用户提交 100 美元用于投资以分配给 3 个债券的情况。等效代码如下所示:

public static void main(String[] args) throws Exception {
BigDecimal bd1 = new BigDecimal("100.0");
BigDecimal bd2 = new BigDecimal("3");
System.out.println(bd1.divide(bd2));
}

但众所周知,这个特定的代码片段会抛出一个 ArithmeticException,因为除法是非终止的。在计算过程中使用无限精度数据类型时,如何在代码中处理此类情况?

TIA,
佐助

更新:鉴于 RoundingMode 有助于解决此问题,下一个问题是,为什么 100.0/3 不是 33.33 而不是 33.3? 33.33 不会是一个“更”准确的答案,因为您期望 33 美分而不是 30 美分吗?有什么方法可以调整它吗?

最佳答案

答案是使用 BigDecimal.divide() 之一指定 RoundingMode 的方法.

例如下面使用舍入方式half even或银行家四舍五入(但一半或其他一种舍入模式可能更合适,具体取决于要求)并将四舍五入到小数点后两位:

bd1.divide(bd2, 2, RoundingMode.HALF_EVEN);

关于java - 用于财务计算和非终止计算的 Bigdecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7618812/

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