我成功移植了 JavaSE 的BigDecimal
. 我还必须移植这些其他类:
- 可比
- 数字
- 大整数
- 比特筛
- 可变大整数
- 有符号可变大整数
基本上我不得不删除泛型,一些序列化方法,几乎所有BigInteger
与素数相关的方法,并int[].clone()
用类似的方法替换。也在调整compareTo
方法。
我的目标只是实现任意精度并将 String 转换为 BigDecimal,我真的不需要其他任何东西。
更新:不工作!!!
似乎在检索源代码时,我混合了来自不同来源的类(来自 OpenJDK、Oracle JavaSE 等)。这些都是针对 Java 6 的,但我注意到不同版本之间的一些重大变化。事实证明,它们的互操作性不好(或者其中一些包含严重的错误,但我不这么认为),因此该端口是一个很大的失败。我需要尽快解决这个问题,所以现在我正在寻找以下替代方案:
- Paypal 已发布移动支付 API。BlackBerry 库包含一个 BigDecimal 端口。它不是开源的,而且这些类已经被混淆了,但至于现在我可以说它工作正常。只需要三个类文件。我希望它已经过彻底的测试,是 Paypal 的东西(至少我希望如此)。
- 还有 bouncycastle 的 SimpleBigDecimal,但它不如 Paypal 或 Java 的强大。我对拥有一个此类不提供的 String 构造函数很感兴趣。
- 我猜 JavaSE 的移植使用 JavaSE v1.4.2 会更容易。由于它没有泛型,因此开发起来可能更快,但我不愿意这样做,因为我认为这些旧类可能不如 1.6 或 1.7 中的新类强大
- 我可以为给定的比例(1 个或 2 个小数)和一个简化的方法集(基本上是比较、加法和减法)实现我自己的简化类,但你知道,我想要一个更通用的解决方案,而不仅仅是一个快速的解决方法。
更新:
我终于使用了 PayPal 的 BigDecimal 端口,该端口包含在他们的黑莓移动支付库中。BlackBerry 基于 J2ME,因此非常适合这项任务。我已经对它进行了大量的单元测试,我可以说它与 JavaSE 的 BigDecimal 的行为是一致的。