Я успешно портировал JavaSE BigDecimal
. Мне пришлось портировать и эти другие классы:
- Сопоставимые
- номер
- BigInteger
- BitSieve
- MutableBigInteger
- SignedMutableBigInteger
В основном мне пришлось удалить обобщенные элементы, некоторые методы сериализации, почти каждый метод в BigInteger
, относящийся к простым числам, и заменить int[].clone()
аналогичным методом. Также настраиваются методы compareTo
.
Моя цель состояла в том, чтобы просто достичь произвольной точности и конвертировать из String в BigDecimal, мне больше ничего не нужно было.
ОБНОВЛЕНИЕ: Не работает !!!
Кажется, что при получении исходного кода я смешал классы из разных источников (те, которые были из OpenJDK, Oracle JavaSE, ...). Все это было для Java 6, но я заметил некоторые значительные изменения между различными версиями версий. Оказывается, что они плохо взаимодействуют (или некоторые из них содержат серьезные ошибки, но я так не думаю), поэтому порт был БОЛЬШИМ. Мне нужно решить это как можно скорее, поэтому сейчас я ищу следующие альтернативы:
- Paypal выпустил API мобильных платежей. Библиотека BlackBerry содержит порт BigDecimal. Это не OpenSource, и классы были запутаны, но сейчас я могу сказать, что он работает правильно. Требуются только три файла классов. Я ожидаю, что это было тщательно проверено, так как это Paypal (по крайней мере, я на это надеюсь).
- Существует также SimpleBigDecimal от bouncycastle, но он не такой мощный, как Paypal или Java. Мне было интересно иметь конструктор String, которого этот класс не предоставляет.
- Полагаю, порт с JavaSE будет проще с использованием JavaSE v1.4.2. Так как у него нет Generics, он может развиваться быстрее, но я не хочу этого делать, потому что я думаю, что эти старые классы, вероятно, не так надежны, как новые классы в 1.6 или 1.7
- Я мог бы реализовать свой собственный сокращенный класс для заданного масштаба (1 или, может быть, 2 десятичных знака) и сокращенный набор методов (в основном сравнивать, добавлять и вычитать), но вы знаете, я хотел бы иметь более общее решение а не просто быстрый обходной путь.
UPDATE:
Я наконец-то использовал порт BigDecimal PayPal, содержащийся в их библиотеке мобильных платежей для BlackBerry. BlackBerry основан на J2ME, поэтому он идеально подходит для этой задачи. Я провел значительное количество модульных тестов и могу сказать, что это соответствует поведению JavaSE BigDecimal.