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