Операция должна попытаться сохранить ответ того же типа, что и исходные данные, поэтому, если держатель начинался с двойного, то результат также должен быть двойным.
Если входные данные содержат держатели разных типов номеров, то они должны автоматически выбираться и т. Д.
Должен быть один тип Holder с геттерами, чтобы возвращать результат в виде целого числа, двойного, большого десятичного, большого целого и т. Д. С исключениями, генерируемыми в случае сбоя преобразования.
Код должен выглядеть как Bigdecimal.
Идеально неизменный
Код не должен знать или заботиться о том, что находится внутри держателя, операции просто работают, пока не потребуется преобразование на более поздней стадии.
К сожалению, BigDecimal не совсем подходит для моих нужд, в нем отсутствуют многие ключевые функции, например: синус, лог и большинство статических помощников по математике.
ApacheCommonsMath
Аксельбб предложил использовать математическую библиотеку apache commons. Основным классом использования в моем случае является DFP.
Изучая DFP, не существует простого способа передать BigDecimal / BigInteger и построить DFP. Было бы хорошо, если бы точность также была параметром и использовалась во время процесса всасывания.
ни одна из функций (например, умножение) не принимает контекст с точностью и округлением, как BigDecimal. Я действительно не понимаю, почему неуклюжий способ обработки точности и округления.
Что такое DfpField, что именно он делает и почему в DFP есть поля ??? Пожалуйста, не говорите мне этот Календарь снова.
нет методов для экспорта в BigDecimal или BigInteger
DFP
это оригинальное вдохновение для apache commons математический класс DFP?
отсутствует первая проблема с импортом из BigDecimal или BigInteger.
Вы можете попробовать пакет gnu.math из языковой платформы kawa , который используется для реализации полной Схемы "числовая башня".Пакет должен быть довольно автономным и независимым от остальной части кавы.
Я знаю эти библиотеки, которые могут быть полезны для вас:
BigDecimal не final. Вы можете расширить его и добавить методы (sine, log и т. Д.) В подкласс.
BigDecimal
final
Я думаю, что лучший способ - написать оболочку для BigDecimal и реализовать все ваши дополнительные опции.