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

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

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

4 ответов


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


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

[Edit] так что просто рассчитать, что, В двоичном формате это,

(2^35)-2 1 (я думаю?)

В дополнение 2-х

01111111111111111...пока ваш баран не заполнится.


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

2240*10232

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


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