Я рассматриваю возможность написания двух ограниченных прецизионных альтернатив BigDecimal, а именно DecimalInt и DecimalLong. Они могли бы иметь дело с числами внутри реальных границ int и long с произвольным числом десятичных знаков, которые были бы созданы как в изменяемой, так и неизменной форме. Мой план состоит в том, чтобы сделать поддержку DecimalInt +/- 999,999,999 до +/- 0,999999999 и DecimalLong той же, но с до 18 цифрами.Легкий Java Decimal Class
Это можно сделать, сохранив десятичное число с цифрой 0-9 для DecimalInt и 0-18 для DecimalLong вместе с фактическим значением, сохраненным как масштабированный int или long. Обычное использование было бы для небольшого количества десятичных знаков, например, для денег и цен на акции, как правило, 2-4 знаков после запятой.
Существенные требования: (a) бережливый след (2 класса плюс исключение OverflowException) и (b) полная поддержка всех основных операций плюс вся математика, которая имеет смысл.
Результаты поиска не получили никаких очевидных ударов - все они, казалось, относились к произвольным десятичным знакам.
Мои вопросы: Это уже сделано? Существуют ли скрытые тонкости в этом, почему это еще не сделано? Кто-нибудь слышал слухи о Java, поддерживающие десятичный тип, такой как DotNet.
EDIT: Это отличается от BigDecimal, поскольку оно должно быть (a) чертовски более эффективным, чтобы не иметь дело с массивом ints и (b) оно не будет обертывать BigInteger, поэтому оно будет более компактным и (c) он будет иметь изменяемый вариант, так что он будет быстрее и там. В итоге - меньше накладных расходов для простых случаев использования, таких как «Я хочу сохранить баланс банка без накладных расходов BigDecimal и неточности двойного».
EDIT: Я намерен делать всю математику, используя Int или долго, чтобы избежать классической проблемы: 1586.60-708.75 = 877,8499999999999 вместо 877,85
"Или это уже было сделано?" Чем отличаются предлагаемые классы и BigDecimal? – 2008-12-09 20:12:05
Когда вы говорите «с произвольным числом десятичных знаков», вы имеете в виду, что у вас есть фиксированное число десятичных знаков или вы хотите иметь возможность поддерживать любое количество десятичных знаков? – DJClayworth 2008-12-10 14:25:01
Скорее всего, было бы быстрее написать его, а иметь дело с людьми, которые не понимают ваш вопрос здесь. – jmucchiello 2008-12-11 03:42:05