Произвольная предустановленная точность десятичных дробей (почти как 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.