Ответ 1
Его произвольный класс точности, он будет как можно больше, пока ваш компьютер не исчерпает память.
Как я могу получить максимально возможное значение переменной BigDecimal? (Желательно программно, но hardcoding тоже будет нормально)
ИЗМЕНИТЬ
Хорошо, просто понял, что такой вещи нет, так как BigDecimal - произвольная точность. Итак, я закончил с этим, что достаточно хорошо для моей цели: BigDecimal my = BigDecimal.valueOf(Double.MAX_VALUE)
Его произвольный класс точности, он будет как можно больше, пока ваш компьютер не исчерпает память.
Взгляд на источник BigDecimal хранит его как BigInteger с основанием,
private BigInteger intVal;
private int scale;
и от BigInteger
/** All integers are stored in 2's-complement form.
63: * If words == null, the ival is the value of this BigInteger.
64: * Otherwise, the first ival elements of words make the value
65: * of this BigInteger, stored in little-endian order, 2's-complement form. */
66: private transient int ival;
67: private transient int[] words;
Таким образом, самый большой BigDecimal будет,
ival = Integer.MAX_VALUE;
words = new int[Integer.MAX_VALUE];
scale = 0;
Вы можете понять, как это установить.: P
[Изменить] Чтобы просто вычислить это, В двоичном формате
(2 ^ 35) -2 1 (я думаю?)
в 2 дополнениях
01111111111111111... пока ваша RAM не заполнится.
Учитывая достаточную ОЗУ, значение приблизительно:
2 2 40 * 10 2 32
(Это определенно на несколько порядков, но в относительных терминах это очень точная оценка.)
Вы можете представить 2 ^ 2147483647-1, однако после этого значения некоторые методы работают не так, как ожидалось. Он имеет 646456993 цифры.
System.out.println(BigInteger.ONE.shiftLeft(Integer.MAX_VALUE)
.subtract(BigInteger.ONE).bitLength());
печатает
2147483647
Однако
System.out.println(BigInteger.ONE.shiftLeft(Integer.MAX_VALUE).bitLength());
печатает
-2147483648
поскольку происходит переполнение числа бит.
BigDecimal.MAX_VALUE достаточно велик, что вам не нужно проверять его.