- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我敢肯定这是一个简单的问题,但我无法在我的一生中决定必须做什么。就是这样:假设我们遵循使用 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/
我尝试进行投资组合优化,但随后出现了TypeError: minimize_sharpe() missing 1 required positional argument: 'log_returns'
考虑到 future 的速度读取和存档的全局大小,存储报价数据(开盘价、最高价、最低价、收盘价、成交量)的最有效方法是什么? XML ? But It is resource consumption
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我正在尝试从 Yahoo! 检索市场数据财务和脚本多年来一直运行良好,但最近,它停止显示道琼斯数据。这是网址: http://download.finance.yahoo.com/d/quotes.c
因此,当我使用组合图表(条形图 + 折线图)时,我对以前版本的 Chartjs(即 2.5)遇到了一些问题,并且在处理时间序列数据时遇到了困难。 就上下文而言,我使用的是财务数据(股票价格和交易量)。
我是一名优秀的程序员,十分优秀!