Frage

Wir machen einige Änderungen an einem Legacy -Projekt mit J2ME vor. Bisher wurden Dezimalzahlen als Saiten behandelt, da keine arithmetischen Operationen erforderlich waren. Die Werte wurden nur als Text angezeigt.

Jetzt ist eine willkürliche Arithmetik erforderlich. Wenn es Java SE wäre, würde ich benutzen BigDecimal, aber es ist nicht in der MIDP/CLDC -API vorhanden.

Ich habe versucht, meine benutzerdefinierte Dezimalnummer-Klasse herauszufinden, aber während ich einige Fehler reparierte und neue in den Unit-Tests entdeckt habe, wurde mir klar, dass es einige Zeit haben wird, um diese Klasse zu fördern und fehlerfrei zu machen.

Welche Alternativen könnte ich für diesen Zweck wiederverwenden, anstatt das Rad neu zu erfinden? Zum Beispiel können das BigInteger und BigDecimal Klassen werden auf J2ME (CLDC1.1) portiert? Ich habe auf andere Frage gelesen, die jemanden gelesen habe, der versucht, Javase zu portieren BigDecimal mit Bouncycastle BigInteger. Sind diese kompatibel?

Jede Hilfe wird geschätzt.

War es hilfreich?

Lösung 2

Ich habe Javase erfolgreich portiert BigDecimal. Ich musste auch diese anderen Klassen portieren:

  • Vergleichbar
  • Nummer
  • Biginteger
  • Bitsieve
  • MutableBiginTeger
  • SignedMutableableBigIntierer

Grundsätzlich musste ich Generika, einige Serialisierungsmethoden, fast jede Methode in entfernen BigInteger im Zusammenhang mit Primzahlen und ersetzen int[].clone() mit einer ähnlichen Methode. Auch das optimieren compareTo Methoden.

Mein Ziel war es nur, willkürliche Präzision zu erreichen und von String in BigDecimal zu konvertieren. Ich brauchte nichts anderes.

AKTUALISIEREN: Funktioniert nicht!!!Beim Abrufen des Quellcodes habe ich Klassen aus verschiedenen Quellen gemischt (von OpenJDK, Oracle Javase, ...). Diese waren alle für Java 6, aber ich habe einige größere Änderungen zwischen verschiedenen Versionsveröffentlichungen festgestellt. Es stellt sich heraus, dass sie nicht gut interoperieren (oder einige von ihnen enthalten ernsthafte Fehler, aber ich glaube nicht), also war der Port ein großer Fehler. Ich brauche eine, um diese so schnell wie möglich zu lösen. Jetzt suche ich nach folgenden Alternativen:

  • PayPal hat die mobile Zahlungs -API veröffentlicht. Die Blackberry Library enthält einen BigDecimal -Port. Es ist keine OpenSource, und die Klassen wurden verschleiert, aber jetzt kann ich sagen, dass es richtig funktioniert. Es werden nur drei Klassendateien benötigt. Ich gehe davon aus, dass es gründlich getestet wurde und PayPals Sachen ist (zumindest hoffe ich es).
  • Es gibt auch Bouncycastles SimpleBigDecimal, aber es ist nicht so mächtig wie Paypal oder Java. Ich war daran interessiert, einen String -Konstruktor zu haben, den diese Klasse nicht bietet.
  • Ich denke, der Port von Javase wäre einfacher mit Javase v1.4.2. Da es keine Generika gibt, ist es möglicherweise schneller, sich zu entwickeln, aber ich zögere, mich dafür zu entscheiden, weil ich denke, dass diese alten Klassen wahrscheinlich nicht so robust sind wie die neueren in 1.6 oder 1,7
  • Ich könnte meine eigene reduzierte Klasse für eine bestimmte Skala (1 oder vielleicht 2 Dezimalstellen) und einen reduzierten Methodensatz (vergleichen, hinzufügen und substrakt eine schnelle Problemumgehung.

AKTUALISIEREN:
Ich habe schließlich den BigDecimal -Port von PayPal in seiner Mobilitätszahlungsbibliothek für Blackberry verwendet. Blackberry basiert auf J2ME und ist also perfekt für die Aufgabe. Ich habe eine beträchtliche Menge an Unit -Tests darauf gemacht und kann sagen, dass es mit dem Verhalten von Javases Bigdecimal übereinstimmt.

Andere Tipps

Haben Sie überlegt, die Implementierung der Harmonie zu schnappen (siehe hier)? Es wird wahrscheinlich etwas aufräumen, da es leider nicht generischfrei ist, aber es ist für Sie da draußen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top