vac*_*ach 0 java floating-point precision currency
我们知道使用float或double不是需要正确精度的选项,我们知道BigDecimal服务于此目的但我们也知道它比常规基元操作慢大约100倍.
现在,如果速度对我们来说至关重要而我们确实需要精确度,我们该怎么办?
我试图以最慢的单位存储货币的价值,并将其转换存储为1 BTC = 100000000 satoshi,但经过几次实验后明确表示您根本无法长期存储100BTC,超过最大可能值.是的,有一个选择牺牲精确度,如存储microBTC等,但问题是更全球化,我们如何用原语设计这样的东西?
正如DEKnuth在他的"计算机程序设计的艺术"第2卷中充分记录的那样,以任意精度实现算术不是"黑色艺术" - 参见"半数算法"一章.我已经完成了这个,遵循实现COBOL计算的必要性(所以:不仅仅是整数).
此外,如果不为每个新的op结果重新创建对象,则可以选择BigInteger或BigDecimal.是的,这意味着工作,但如果你真的认为你需要它......
我发现,就算术而言,BigInteger并不是那么慢.真正为我使用它的原因是必须频繁地在二进制和十进制(十进制数组之间)之间进行转换.