我们正在使用J2ME对遗留项目进行一些修改。 到目前为止,十进制数被视为字符串,因为不需要算术运算。这些值仅显示为文本。
现在,需要任意精度算术。如果它是Java SE,我会使用BigDecimal
,但它不存在于MIDP / CLDC API中。
我试图找出我的自定义DecimalNumber类,但是当我修复一些错误并在单元测试中发现新错误时,我意识到它会花一些时间让这个类坚如磐石而且没有错误。
那么,不是重新发明轮子,我可以为此目的重复使用哪些替代方案?例如,BigInteger
和BigDecimal
类可以移植到J2ME(CLDC1.1)吗?我读过有人试图用bouncycastle BigDecimal
移植JavaSE BigInteger
的其他问题。这些兼容吗?
任何帮助将不胜感激。
答案 0 :(得分:1)
我成功移植了JavaSE的BigDecimal
。我不得不移植其他类:
基本上我必须删除泛型,一些序列化方法,几乎BigInteger
中与素数相关的每个方法,并用类似的方法替换int[].clone()
。同时调整compareTo
方法。
我的目标只是实现任意精度并从String转换为BigDecimal,我真的不需要任何其他东西。
更新:不工作!!! 似乎在检索源代码时,我混合了来自不同来源的类(来自OpenJDK,Oracle JavaSE,......)。这些都是针对Java 6的,但我注意到不同版本之间的一些重大变化。事实证明,他们没有很好的互操作性(或者其中一些包含严重的错误,但我不这么认为)所以端口是一个很大的失败。我需要尽快解决这个问题,所以现在我正在寻找以下替代方案:
更新:
我终于使用了他们的BlackBerry移动支付库中包含的PayPal的BigDecimal端口。 BlackBerry基于J2ME,因此它非常适合这项任务。我已经对它进行了大量的单元测试,我可以说它与JavaSE的BigDecimal的行为一致。
答案 1 :(得分:1)
您是否考虑过阻止Harmony实施(请参阅here)?它可能需要一些清理,因为它很遗憾不是通用的,但它可以帮助你。