Произвольная предустановленная точность десятичных дробей (почти как BigDecimal)

Я ищу класс Java, который будет содержать десятичное значение с произвольной заданной точностью. Класс BigDecimal выглядит хорошим кандидатом в качестве отправной точки, но я хочу иметь возможность ограничить размер десятичной дроби тем, что решит конечный пользователь. Говоря буквально, конечный пользователь указал бы диапазон в базе 10, и я бы выделил достаточно байтов для представления любого числа в этом диапазоне.

Я думал о том, чтобы иметь класс, который расширяет BigDecimal, В этом классе я бы добавил функции, необходимые для имитации десятичной дроби в заданном диапазоне.

Мои вопросы к сообществу: есть ли библиотеки, которые уже делают это?
Будет продолжаться BigDecimal быть разумным занятием?

2 ответа

Решение

Я бы предложил вам промежуточный путь между предложениями, которые вы сделали:

Apfloat библиотека - хороший способ попробовать, посмотрите API документы.
Apcomplex является классом-оберткой, например, для BigDecimal,

Так что здесь у вас будет большая свобода в переопределении и расширении новых методов, просто применяя этот класс.

Интересно, что BigDecimal уже имеет все, что вам нужно. Простые методы add(BigDecimal), multiply(BigDecimal) и т. Д. Работают с неограниченной точностью.

Методы add(BigDecimal,MathContext), multiply(BigDecimal,MathContext) и т. Д. Позволяют указать запрошенную верхнюю границу для количества цифр, которое должна иметь получающаяся в результате мантисса.

Таким образом, в основном вы получаете результаты обратно в виде:

sign * mantissa * 10^exponent

С гарантией того, что 0=< mantissa < 10^requested, Методы выполняют округление в соответствии с режимом, указанным в MathContext.

Другие вопросы по тегам