轻量级 Java 十进制类
我正在考虑编写两个有限精度的BigDecimal替代品,即DecimalInt和DecimalLong。这些将能够处理整数和长边的实数范围内的数字,具有任意数量的小数位数,可以以可变和不可变的形式创建。我的计划是使DecimalInt支持+/-999,999,999到+/- 0.99999999999和DecimalLong相同,但最多有18位数字。
为此,对于 DecimalInt,将十进制数字计数值 0-9 和 DecimalLong 的十进制数字计数值与存储为缩放整数或长整型的实际值一起保持 0-18。正常使用是小数小数,例如货币和股票价格,通常为小数点后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