我正在考虑为 BigDecimal 编写两个有限精度的替代方案,即 DecimalInt 和 DecimalLong。这些将能够处理 int 和 long 的实际范围内的数字,具有任意数量的小数位,可以以可变和不可变的形式创建。我的计划是让 DecimalInt 支持 +/-999,999,999 到 +/- 0.999999999 和 DecimalLong 相同,但最多支持 18 位数字。
这将通过将 DecimalInt 的十进制数字计数值 0-9 和 DecimalLong 的 0-18 与存储为缩放的 int 或 long 的实际值一起维护来完成。通常用于小数位数,例如货币和股票价格,通常为 2-4 位小数。
基本要求是 (a) 精简足迹(2 个类,加上 OverflowException),以及 (b) 完全支持所有基本操作以及所有有意义的数学。
谷歌搜索结果没有返回任何明显的命中——它们似乎都与任意小数有关。
我的问题是:这已经完成了吗?这是否有隐藏的微妙之处,这就是为什么它还没有完成?有没有人听说过 Java 支持像 DotNet 的十进制类型的传闻。
编辑:这与 BigDecimal 不同,因为它应该(a)不处理整数数组的效率要高得多,并且(b)它不会包装 BigInteger,因此它也会更精简内存,并且(c) 它将有一个可变选项,因此在那里它也会更快。总而言之 - 像“我想存储银行余额而不需要 BigDecimal 的开销和 double 的不准确性”这样的简单用例的开销更少。
编辑:我打算使用 int 或 long 进行所有数学运算,以避免经典问题:1586.60-708.75=877.8499999999999 而不是 877.85