Я рассматриваю возможность написания двух альтернатив с ограниченной точностью для BigDecimal, а именно DecimalInt и DecimalLong. Они могли бы иметь дело с числами в пределах реальных границ int и long с произвольным числом десятичных знаков, создаваемых как в изменяемой, так и в неизменяемой форме. Мой план состоит в том, чтобы сделать поддержку DecimalInt от +/- 999,999,999 до +/- 0,9999999999 и DecimalLong одинаковыми, но с до 18 цифрами.
Это можно сделать, поддерживая значение счетчика десятичных цифр от 0 до 9 для DecimalInt и от 0 до 18 для DecimalLong вдоль фактического значения, сохраненного как масштабированное int или long. Обычно используется для небольшого числа десятичных знаков, таких как деньги и цены на акции, обычно 2-4 знака после запятой.
К основным требованиям относятся: (а) экономная площадь (2 класса плюс OverflowException) и (б) полная поддержка всех базовых операций и всей математики, которая имеет смысл.
Поиск в результатах поиска не дал никаких очевидных результатов - все они, похоже, имели отношение к произвольным десятичным знакам.
Мои вопросы: это уже сделано? Есть ли в этом скрытые тонкости, поэтому это еще не сделано? Кто-нибудь слышал слухи о том, что Java поддерживает десятичный тип, такой как DotNet.
РЕДАКТИРОВАТЬ: Это отличается от BigDecimal, потому что это должно быть (а) намного более эффективным, чтобы не иметь дело с массивом целых чисел, и (б) он не обернет BigInteger, так что он будет меньше памяти также, и (c) у него будет изменяемая опция, поэтому он будет быстрее там. В итоге - меньше накладных расходов для простых случаев использования, таких как «Я хочу сохранить баланс в банке без накладных расходов на BigDecimal и неточность двойного».
РЕДАКТИРОВАТЬ: Я собираюсь выполнить всю математику, используя int или long, чтобы избежать классической проблемы: 1586.60-708.75 = 877.8499999999999 вместо 877.85