Подтвердить что ты не робот

Как получить наибольшее значение BigDecimal

Как я могу получить максимально возможное значение переменной BigDecimal? (Желательно программно, но hardcoding тоже будет нормально)

ИЗМЕНИТЬ
Хорошо, просто понял, что такой вещи нет, так как BigDecimal - произвольная точность. Итак, я закончил с этим, что достаточно хорошо для моей цели:
BigDecimal my = BigDecimal.valueOf(Double.MAX_VALUE)

4b9b3361

Ответ 1

Его произвольный класс точности, он будет как можно больше, пока ваш компьютер не исчерпает память.

Ответ 2

Взгляд на источник 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 не заполнится.

Ответ 3

Учитывая достаточную ОЗУ, значение приблизительно:

2 2 40 * 10 2 32

(Это определенно на несколько порядков, но в относительных терминах это очень точная оценка.)

Ответ 4

Вы можете представить 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 достаточно велик, что вам не нужно проверять его.