Вопрос

Мы вносим некоторые изменения в устаревший проект с использованием J2ME. До сих пор десятичные числа рассматривались как строки, поскольку не требовались арифметические операции. Значения отображались только как текст.

Теперь требуется произвольная арифметика. Если бы это был Java SE, я бы использовал BigDecimal, но его нет в API MIDP/CLDC.

Я пытался проработать свой пользовательский урок DecimalNumber, но, хотя я исправлял некоторые ошибки и обнаруживал новые в модульных тестах, я понял, что у него будет некоторое время, чтобы сделать этот класс Rock Solid и без ошибок.

Итак, вместо переосмысления колеса, какие альтернативы я могу повторно использовать для этой цели? Например, может BigInteger а также BigDecimal Занятия переносятся в J2ME (CLDC1.1)? Я читал по другому вопросу, кто -то пытается портировать Javase's BigDecimal с Bouncycastle's BigInteger. Анкет Это совместимы?

Любая помощь будет оценена.

Это было полезно?

Решение 2

Я успешно перенес Javase BigDecimal. Анкет Мне пришлось портировать также эти другие классы:

  • Сопоставимо
  • Число
  • BigInteger
  • Биты
  • MintableBigInteger
  • SignedmutableBigInteger

В основном мне пришлось удалить дженерики, некоторые методы сериализации, почти каждый метод в BigInteger Связаны с простыми числами и заменить int[].clone() с аналогичным методом. Также настройка compareTo методы

Моя цель состояла в том, чтобы просто достичь произвольной назначения и преобразования из строки в BigDecimal, мне не нужно ничего другого.

ОБНОВИТЬ: Не работает!!!Кажется, что при получении исходного кода я смешал классы из разных источников (были из OpenJDK, Oracle Javase, ...). Все это были для Java 6, но я заметил некоторые серьезные изменения между различными выпусками версий. Оказывается, что они плохо взаимодействуют (или либо некоторые из них содержат серьезные ошибки, но я так не думаю), поэтому порт был большим провалом. Мне нужно решить это как можно скорее, так что теперь я ищу следующие альтернативы:

  • PayPal выпустил API мобильного платежа. Библиотека Blackberry содержит большую часть. Это не открыто, и классы были запутаны, но сейчас я могу сказать, что он работает должным образом. Требуются только три файла класса. Я ожидаю, что это было тщательно протестировано, будучи вещами PayPal (по крайней мере, я надеюсь на это).
  • Существует также SimpleBigDecimal Bouncycastle, но он не такой мощный, как у Paypal или Java. Я был заинтересован в создании строкового конструктора, которого не предоставляет этот класс.
  • Я предполагаю, что порт от Javase будет легче использовать Javase V1.4.2. Поскольку у него нет дженериков, это может быть быстрее развиваться, но я неохотно буду этим, потому что я думаю, что эти старые классы, вероятно, не так надежны, как более новые в 1.6 или 1,7
  • Я мог бы внедрить свой собственный сокращенный класс для данной шкалы (1 или, может быть, 2 десятичных деть. быстрый обходной путь.

ОБНОВИТЬ:
Я наконец использовал Bigdecimal Port PayPal, содержащийся в их библиотеке платежей мобильности для BlackBerry. BlackBerry основан на J2ME, поэтому он идеально подходит для этой задачи. Я сделал значительное количество модульных тестов на нем, и я могу сказать, что это согласуется с поведением Javase BigDecimal.

Другие советы

Считали ли вы зацепить реализацию гармонии (см. здесь)? Вероятно, это потребуется некоторая очистка, так как, к сожалению, не общая, но это для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top