dyn*_*eed 2 java currency arbitrary-precision
几年前,我帮助编写了一份处理金钱和保险的申请.最初,我们用浮点数代表货币(我知道这是一个很大的禁忌号).大多数应用程序只是添加和减去值,所以没有任何问题.但是,具体部分涉及货币价值的百分比,因此是乘法和除法.
我们立即开始遭遇浮点错误,不得不做一个重大的重构.我们使用了一个任意精度库来解决这个问题.然而,它并没有改变你最终只能获得一分钱的事实.你怎么回事呢?简短的回答是" 它很复杂".
现在我正准备开始研究类似的应用程序以取代旧的应用程序.多年来我一直在考虑这个问题.我一直认为最简单的方法是创建一个money数据类型,它包含一个整数(或BigInteger)来表示带有函数的便士数,以便将其打印成传统的,人性化的$0.00格式.
然而,研究这个,我找到了最近实现的Java Money API JSR 354.我惊讶地发现它支持它的代表性BigDecimal.因此,它包括用于舍入的特定逻辑.
在计算中携带一分钱的优势是什么?为什么我要这样做而不是说一分钱是"原子"形式的钱?
这是一个广泛的问题,因为它的答案因其实施而不同.
如果我以5美元的价格批量购买1000件商品,那么每件商品的价格将分别为0.005美元,低于您声称的"原子形式"的0.01美元.
如果我们认为0.01美元是可能的最低金额,那么我们将无法在特定情况下处理计算,例如我的示例中的计算.
因此,JavaMoney API处理许多小数位数,确保在这些情况下不会丢失精度.
| 归档时间: |
|
| 查看次数: |
820 次 |
| 最近记录: |