質問

J2MEを使用して、レガシープロジェクトにいくつかの変更を加えています。これまで、算術操作が不要であるため、小数点以降は文字列として扱われていました。値はテキストとしてのみ表示されました。

これで、任意の前提条件算術が必要です。それがJava SEであれば、私は使用します BigDecimal, 、しかし、それはMIDP/CLDC APIには存在しません。

私はカスタムDecimalNumberクラスを解決しようとしていましたが、いくつかのバグを修正し、ユニットテストで新しいバグを発見している間、このクラスをロックソリッドとエラーなしにする時間があることに気付きました。

それで、ホイールを再発明する代わりに、この目的のためにどのような選択肢を再利用できますか?たとえば、 BigIntegerBigDecimal クラスはJ2ME(CLDC1.1)に移植されますか?私は他の質問で読んだ誰かがJavaseをポートしようとしている BigDecimal bouncycastleの BigInteger. 。これらは互換性がありますか?

どんな助けも感謝します。

役に立ちましたか?

解決 2

Javaseの移植に成功しました BigDecimal. 。私はこれらの他のクラスもポートしなければなりませんでした:

  • 同程度の
  • 番号
  • biginteger
  • ビットーブ
  • MutableBiginteger
  • SignedMutableBiginteger

基本的に、ジェネリック、いくつかのシリアル化方法を削除する必要がありました。 BigInteger プライムに関連し、交換します int[].clone() 同様の方法で。また、微調整します compareTo 方法。

私の目標は、任意の前提を達成し、文字列からBigDecimalに変換することでしたが、他に何も必要ありませんでした。

アップデート: 働いていない!!!ソースコードを取得するとき、私はさまざまなソースからクラスを混合したようです(それはOpenJDK、Oracle Javaseからのものでした...)。これらはすべてJava 6向けでしたが、異なるバージョンリリースの間にいくつかの大きな変化に気付きました。彼らはうまく相互運用していないことがわかります(または、それらのいくつかは深刻なバグを含んでいますが、私はそうは思いません)ので、ポートは大きな失敗でした。私はこれをできるだけ早く解決する必要があるので、今私は次の選択肢を探しています:

  • PayPalはモバイル決済APIをリリースしました。 BlackBerryライブラリには、大規模なポートが含まれています。それはOpenSourceではなく、クラスは難読化されていますが、今に関してはそれが適切に機能していると言えます。 3つのクラスファイルのみが必要です。私はそれが徹底的にテストされ、PayPalのものであることを期待しています(少なくともそう願っています)。
  • BouncycastleのSimplebigdecimalもありますが、PaypalやJavaのように強力ではありません。私はこのクラスが提供していない文字列コンストラクターを持っていることに興味がありました。
  • Javase V1.4.2を使用してJavaseのポートが簡単になると思います。ジェネリックがないため、開発する方が速いかもしれませんが、これらの古いクラスはおそらく1.6または1.7の新しいクラスほど堅牢ではないと思うので、私はこれに行くことを嫌がります。
  • 特定のスケール(1つまたは2つの小数)と縮小メソッドセット(基本的に比較、追加、サブラクト)で独自のクラスを実装できますが、ご存知のように、より一般的なソリューションを持ちたいだけでなく、簡単な回避策。

アップデート:
私はついに、BlackBerryのモビリティ支払いライブラリに含まれるPayPalのBigDecimalポートを使用しました。 BlackBerryはJ2MEに基づいているため、タスクに最適です。私はそれについてかなりの量の単体テストを作成しました、そして、それはJavaseのBigDecimalの挙動と一致していると言えます。

他のヒント

ハーモニーの実装を手に入れることを検討しましたか(参照してください ここ)?残念ながらジェネリックフリーではなく、あなたのためにそこにあるので、おそらくクリーンアップが必要になるでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top