Domanda

Stiamo facendo alcune modifiche ad un progetto di eredità con J2ME. Fino ad ora, i numeri decimali sono stati trattati come stringhe in quanto non erano necessarie operazioni aritmetiche. I valori sono stati visualizzati solo come testo.

Ora, è richiesto l'aritmetica precisione arbitraria. Se fosse Java SE, userei BigDecimal, ma non è presente nella API MIDP / CLDC.

I stava cercando di capire la mia classe DecimalNumber personalizzato, ma mentre stavo riparando alcuni bug e la scoperta di nuovi nei test di unità, mi sono reso conto che otterrà po 'di tempo per fare questa classe solida e senza errori.

Così, invece di reinventare la ruota, quali alternative potrei riutilizzare per questo scopo? Ad esempio, possono le classi BigInteger e BigDecimal essere portato su J2ME (CLDC1.1)? Ho letto su altra questione qualcuno che cerca di BigDecimal porto di JavaSE con BigInteger di BouncyCastle. Sono questi compatibili?

Ogni aiuto sarà apprezzato.

È stato utile?

Soluzione 2

ho portato con successo BigDecimal di JavaSE. Ho dovuto alla porta anche queste classi:

  • paragonabile
  • Numero
  • BigInteger
  • BitSieve
  • MutableBigInteger
  • SignedMutableBigInteger

In pratica ho dovuto togliere farmaci generici, alcuni metodi di serializzazione, quasi ogni metodo BigInteger relativi a numeri primi, e sostituire int[].clone() con un metodo simile. tweaking anche i metodi compareTo.

Il mio obiettivo era solo per raggiungere precisione arbitraria e convertito da stringa a BigDecimal, non ho davvero bisogno di nient'altro.

UPDATE: Non funziona !!! Sembra che durante il recupero del codice sorgente, ho mescolato le classi da fonti diverse (quelle erano da OpenJDK, Oracle JavaSE, ...). Questi erano tutti per Java 6, ma ho notato alcuni cambiamenti importanti tra le diverse versioni di versione. Si scopre che non sono interoperabili bene (o uno alcuni di essi contengono gravi errori, ma io non la penso così) in modo che il porto è stato un grande sicuro. Ho bisogno di un per risolvere questo più presto, così ora sto cercando le seguenti alternative:

  • Paypal ha rilasciato l'API Mobile Payment. La biblioteca BlackBerry contiene una porta BigDecimal. Non è OpenSource, e le classi sono state offuscato, ma per ora posso dire che sta funzionando correttamente. Sono necessari solo tre file di classe. Mi aspetto che sono stati accuratamente testati, essendo roba di Paypal (almeno lo spero).
  • C'è anche SimpleBigDecimal di BouncyCastle, ma non è potente come Paypal o Java del di. Ero interessato ad avere un costruttore String, che questa classe non fornisce.
  • Credo che il porto da JavaSE sarebbe più facile usando JavaSE v1.4.2. Dato che non ha Generics, può essere più veloce di sviluppare, ma sono riluttanti ad andare per questo, perché penso che queste vecchie classi probabilmente non sono così robusta come quelli più recenti a 1.6 o 1.7
  • I potrebbe implementare mia classe ridotta per una data scala (1 o forse 2 decimali) e un set metodo ridotta (confrontare, aggiungere e sottrarre, in fondo), ma sai, mi piacerebbe avere una soluzione più generica e non solo una soluzione rapida.

UPDATE:
Alla fine ho usato il porto BigDecimal di PayPal contenuta nella loro mobilità Pagamento Biblioteca per BlackBerry. BlackBerry si basa sul J2ME, quindi è perfetto per il compito. Ho fatto una notevole quantità di unit test su di esso e posso dire che è coerente con il comportamento di BigDecimal di JavaSE.

Altri suggerimenti

Avete preso in considerazione l'attuazione sbavatura Harmony (vedi qui )? Sarà probabilmente bisogno di qualche alto pulito come lo è, purtroppo, non-generic libera, ma la sua là fuori per voi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top